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?
提前许多不止于此
受保护的成员只能在构造,销毁期间或通过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
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |