我有一個關於繼承的C++問題。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=|
?
爲什麼* pd = d有兩個X :: op = |和* pb = * pd只有一個X :: op = |? – Mebighobo