C ++中的继承成员函数如何与子成员变量一起使用?

时间:2015-08-10 13:59:44

标签: c++ inheritance

例如,我有基类A:

class A {
public:
    callA() {
        val = 100;
        std::cout << this->val << std::endl;
    }
    int val;
}

class B : public A {
    public:
    B() {
        val = 10;
    }
    int val;
}

B b;
b.callA();

b.callA()会打印什么?

对于B继承A,如果B没有字段val,B会分享对A的精确引用,还是副本?

1 个答案:

答案 0 :(得分:4)

在内部,任何B类实例都包含A类的完整副本。事实上,当您初始化B类的新实例时,首先运行A类构造函数。因此,当您从基类调用非虚函数时,它将像从基类运行一样运行,基类是派生类的内部类。它甚至可以访问基类的私有变量(派生类无法访问它,它只能访问基类中的公共/受保护变量)。

Example

#include <iostream>
using namespace std;

class A
{
public:

   A()
   {
      cout << "Base constructor!" << endl;

      privateVar = 10;
   }

   void testPrint()
   {
      cout << "privateVar: " << privateVar << endl;
   }

private:

   int privateVar;
};

class B : public A
{
public:
   B()
   {
      cout << "Derived Constructor!" << endl;
   }
};

int main()
{
   B testB;
   testB.testPrint();

   return 0;
}