在简单继承之后调用copy-constructor

Luv*_*Luv 1 c++ inheritance copy-constructor

我对遗传的一些概念有疑问,我说的是我所知道的,如果我错了,请纠正我.

基类的私有成员由派生类继承,但派生类无法通过任何方式访问它们.

基类的受保护成员由派生类继承,但派生类不能直接访问它,而是通过其某些成员函数的帮助.

现在在以下代码中:

class A
    {
        protected:
        A(const A&){}
        A operator=(const A &){}
        int t;
        public:
        A(int r)   {t=r;}
        A(){t=0;}
     };

class B : public A
      {
       A a;
      public:
      void make(void)
      {
         //A b(a);      //LINE 1 -------COPY CONSTRUCTOR BEING CALLED ---protected member of base class 
         cout<<t;   //LINE 2 -------protected member of base class 
      }
      };

   int main()
   {
        B b;
        b.make();
        return 0;
   }
Run Code Online (Sandbox Code Playgroud)

为什么LINE 1出现错误?

为什么我们不能为A的对象调用copy-constructor?

提前许多不止于此

Jam*_*lis 5

受保护的成员只能在构造,销毁期间或通过this指针(*)访问同一完整对象的其他成员.

在示例类层次结构中,B对象有两个类型的子对象A:

  • 基类子对象,它通过派生得到A,和
  • 命名的数据成员子对象a,通过声明获得a.

一个成员B只能从第一A个子对象访问受保护的成员,而不是从第二个子对象访问受保护的成员,因为只有第一个直接使用this指针(请注意您的表达式cout << t在语义上等同于cout << this->t).

访问数据成员的成员不直接使用this指针:如果你试图访问this->a.t距离B::make,该this指针不能直接用于访问t.在您的声明中A b(a);,复制构造函数不是为this,而是为A您正在构造的新对象调用名为的局部变量b.


(*)或者,当然,由类中任何声明它的成员:任何成员函数都B可以调用任何其他成员函数B