【发布时间】:2023-03-20 10:45:02
【问题描述】:
我在 C++/JUCE 项目中有 3 个类:KeyboardGUI、Chord 和 Audio。
KeyboardGUI 收到一个名为 rootNote 的 int,需要将其提供给 Chord。
然后,Chord 需要将此值赋予 Audio。
我正在尝试使用 getter/setter 来实现这一点,但我不确定使用它们的方式:即:我是否从键盘 GUI 设置和弦,并从 Chord 设置音频,或者我是否从键盘 GUI 获取和弦,并从和弦到音频。
据我所知,我需要在 KeyboardGUI 或 Audio 中创建 1 个 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??;
}
我应该在我的音频类中使用指针吗?
【问题讨论】:
-
这真的取决于你想要流入的方向。两者都应该没问题。如果
KeyboardGUI正在启动Chord::rooteNote的更改,那么它应该设置它并且Chord可以在需要时使用它。同样,Audio在需要的时候可以得到Chord::rootNote。由于您在Chord类中设置了 getter/setter 函数,因此我将在Audio::playChord中将其用于get和chord->getRootNote() -
如果我以这种方式实现它,是否可以从我的 Chord 类中调用 Audio::playChord?
-
你的类需要引用它使用的任何类。也许该引用是存储在堆栈上的类中的实际对象,或者它可能是存储在堆上的对象。这个选择取决于你作为程序员。通常堆是首选的,只有一个指针存储在类中,但是你必须明确地清理你使用的内存。否则会出现内存泄漏。
-
@SteffanDavies 是的,你可以。获取指向
Audio对象的指针并调用Audio->playChord -
你必须弄清楚发生了什么。和弦是在弹钢琴,还是钢琴在弹和弦?尾巴在摇狗吗?
标签: c++ class pointers setter getter