类的继承变量和自己的变量之间的区别

use*_*214 0 c++ inheritance pointers

有人可以解释一下我自己的类变量和继承变量之间的区别吗?例如,在此代码中:

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;
}
Run Code Online (Sandbox Code Playgroud)

GetTestFirst()和GetTestSecond()的输出有什么区别?它指向相同的内存块吗?如果是同一件事,哪一个更好用?

Woj*_*wka 5

没有区别 - 一个Second对象只有一个test成员,继承自First.所以说

return First::test;
Run Code Online (Sandbox Code Playgroud)

是多余的 - 你可以使用

return test
Run Code Online (Sandbox Code Playgroud)

(没有this其他答案状态 - 这也不是必要的).你不应该使用

Second::GetTestFirst()
Run Code Online (Sandbox Code Playgroud)

和类似的.编译器完全知道它正在编译Second.

GetTestFirst()
Run Code Online (Sandbox Code Playgroud)

足够.据我所知,所有First::Second::你的代码都没有必要.最后一个观察:在C++中你不应该使用动态内存,除非你需要.代替

Second * sec = new Second;
Run Code Online (Sandbox Code Playgroud)

你应该使用

Second sec;
Run Code Online (Sandbox Code Playgroud)

.不是->以后.