使用getter / setter在类之间传递值

时间:2016-11-22 19:00:32

标签: c++ class pointers setter getter

我在C ++ / JUCE项目中有3个类:KeyboardGUI,Chord和Audio。

KeyboardGUI接收一个名为rootNote的int,需要将其提供给Chord。

Chord需要将此值提供给Audio。

我正在尝试使用getter / setter来实现这一点,但是我不确定使用它们的方式:ie:我是否从键盘GUI设置和弦,并从Chord设置音频,或者我是否从keyboardGUI到和弦,从和弦到音频。

据我所知,我需要在KeyboardGUI或Audio中创建一个Chord实例,并使用指针从另一个类访问此实例,但我无法弄清楚如何实现它。

我应该在哪个方向进行/设置?我应该在哪里使用实例或指针?

从KeyboardGUI设置为和弦的功能

            void KeyboardGUI::handleNoteOn (MidiKeyboardState* source, int midiChannel, int midiNoteNumber, float velocity)
            {
            //IS THIS CORRECT?
            chord.setRootNote(midiNoteNumber);
            }

Chord.CPP中的Getter / Setter函数

            void Chord::setRootNote(int newNote)
            {
                rootNote = newNote;
            }

            int Chord::getRootNote()
            {
                return rootNote;
            };

这里我需要访问rootNote并将其放在一个新变量

 void Audio::playChord()
            {

                //get root note from chord - use pointer??;

            }

我应该在Audio类中使用指针吗?

1 个答案:

答案 0 :(得分:0)

以下是您如何做到这一点的示例。我不确定哪个类会使用哪个层次结构,所以我只是认为Audio是顶级狗,它随意使用Class Chord。使用对您最有用的东西。

Audio.h

class Audio 
{
  public:
    Chord * myChordPTR;  //option 1 variable myChordPTR of type pointer to Chord
    Chord myChord;       //option 2 actual chord object stored on the stack

    Audio();
    ~Audio();
    void playChord();
}

Audio.cpp

Audio::Audio() 
{
    myChordPTR = new Chord();  //instantiates a Chord object on the heap
}
Audio::~Audio() 
{
    delete myChordTRP;         //frees the memory of the object that was on the heap 
}
void Audio::playChord() 
{
    int rootNode = myChordPTR->getRootNode();
    int otherRootNode = myChord.getRootNode();       
}

了解myChordPTR是一个指针,允许Audio类使用Chord类型的对象?

这里的要点是当一个类试图使用另一个类的方法时,它需要某种方式来引用该类的特定对象(除非它只使用静态方法)。

请注意,箭头操作符->用于访问指针的成员,而点运算符.用于访问对象本身的成员。

我没有包含KeyboardGUI课程以努力保持这个答案的最小化,但我认为使用我提供的内容应该能够弄明白。