有人可以解释一下我自己的类变量和继承变量之间的区别吗? 例如,在此代码中:
class First
{
public:
int test;
First::First()
{
test = 5;
}
};
class Second : public First
{
public:
void setTest(int test)
{
Second::test = test;
}
int Second::GetTestFirst()
{
return First::test;
}
int Second::GetTestSecond()
{
return Second::test;
}
};
int main()
{
int input;
Second * sec = new Second;
cin >> input;
sec->setTest(input); //for example 15
std::cout << sec->GetTestFirst();
std::cout << sec->GetTestSecond();
return 0;
}
GetTestFirst()和GetTestSecond()的输出有什么区别?它指向相同的内存块吗?如果它是相同的,哪一个更好用?
答案 0 :(得分:5)
没有区别 - Second
对象只有一个test
成员,继承自First
。所以说
return First::test;
是多余的 - 你可以使用
return test
(没有this
作为其他答案状态 - 这也不是必需的)。你也不应该使用
Second::GetTestFirst()
和类似的。编译器完全知道它正在编译Second
。
GetTestFirst()
就够了。据我所知,您的代码中的所有First::
和Second::
都不是必需的。最后一个观察:在C ++中你不应该使用动态内存,除非你需要。而不是
Second * sec = new Second;
你应该使用
Second sec;
和.
代替->
。
答案 1 :(得分:0)
GetTestFirst()和GetTestSecond()执行相同的操作,因为 test 变量仅在基类中定义。解决该变量的正确方法是使用 this 关键字;
return this->test;