【发布时间】:2016-03-02 23:13:29
【问题描述】:
我有一个关于继承的 C++ 问题。
class X{
public:
X()
{
cerr << "X()|";
}
X(const X& c)
{
cerr << "X(const X&)|";
}
~X()
{
cerr << "~X()|";
}
X& operator=(const X& c)
{
cerr << "X::op=|"; return *this;
}
};
class B{
public:
B()
{
cerr << "B()|";
}
B(const B& c):x1_(c.x1_)
{
cerr << "B(const B&)|";
}
virtual ~B()
{
cerr << "~B()|";
}
B& operator=(const B& c)
{
cerr << "B::op=|";
x1_=c.x1_;
return *this;
}
private:
X x1_;
};
class D:public B{
public:
D()
{
cerr << "D()|";
}
virtual ~D()
{
cerr << "~D()|";
}
private:
X x2_;
};
问题 1:
当我运行B *pb = new B() 时,结果是X()|B()|。
当我运行D *pd = new D() 时,结果是X()|B()|X()|D()|。
这是为什么呢? B 不是 X 的子类。
问题 2:
首先我运行D d(*pd)。
然后我运行*pd = d,结果是B::op=|X::op=|X::op=|
然后我运行*pb = *pd,结果是B::op=|X::op=|
为什么*pd = d 有两个X::op=| 而*pb = *pd 只有一个X::op=|?
【问题讨论】:
标签: class c++11 inheritance