假設我有這2類:問題與抽象類和的傳承
class num{
public:
int a;
num(){};
num(int x):a(x){};
num(const num& n):a(n.a){}
virtual bool operator==(const num& n)const = 0;
virtual ~num(){};
};
class tmp: public num{
public:
tmp(){};
tmp(int x):num(x){};
tmp(const num& n): num(n){}
tmp(const tmp& t): num(t.a){}
virtual bool operator==(const num& n)const{
return tmp(n).a == a;
}
virtual ~tmp(){};
};
和像這樣在主:
int main() {
num* x = &get(...);
return 0;
}
get
回報(tmp
類型的引用在這種情況下,一般它返回引用的類型,它繼承自num
) 我想要做的是創建另一個num* y
,它將指向一個副本的*x
所以如果我改變*y
我不會改變*x
。我不知道如何做到這一點,因爲num
是抽象的,所以我不能創建這種類型的對象來創建副本。
好的和另一個問題。 如果我重載<<
操作:
std::ostream& operator<<(std::ostream& os, const tmp& t){
return os<<t.a<<endl;
}
,然後嘗試做到這一點:
cout<<*x<<endl;
我得到一個錯誤no match for 'operator<<'
這是爲什麼?
只需使用'tmp'的複製構造函數? – Quentin 2014-09-12 13:30:03
我正在使用'num *',因爲我不知道'get'返回了什麼。它可以是'tmp'或其他一些從'num'繼承的類型。所以我不能使用特定的拷貝構造函數 – littlerunaway 2014-09-12 13:31:59
當然。腦呃逆。 – Quentin 2014-09-12 13:38:45