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

时间:2014-07-31 15:26:40

标签: c++ pointers inheritance

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

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()的输出有什么区别?它指向相同的内存块吗?如果它是相同的,哪一个更好用?

2 个答案:

答案 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;