[英]Can I write a copy constructor for an Abstract base class using pointer instead of reference (&)?
在IBM ISL采訪中被問到這個問題。 我可以使用指針而不是引用(&)為Abstract基類編寫復制構造函數嗎?
我認為它可以使用。 有什么意見/建議嗎?
#include <string>
//abstract base class
class ABC{
int a;
int b;
char *p;
public:
virtual void f() = 0;
ABC(){};
ABC(ABC* abc){
a = abc->a;
b = abc->b;
p = new char[strlen(abc->p)+1];
p = strcpy(p, abc->p);
}
};
//derived class
class ConcreteDerivedClass: private ABC
{
public:
ConcreteDerivedClass(){}
void f(){}
ConcreteDerivedClass(ConcreteDerivedClass& obj):ABC(&obj){}
};
ABC(ABC* abc)
這不是復制構造函數。
復制構造函數必須是以下形式之一:
ABC(ABC & abc);
ABC(ABC const & abc); //most common form
ABC(ABC volatile & abc);
ABC(ABC const volatile & abc);
第二個是最常見的。 因此,定義此表單的副本構造函數:
ABC(ABC const & abc);
然后從派生的copy-constructor中調用它:
ConcreteDerivedClass(ConcreteDerivedClass const & obj): ABC( obj)
//^^^^^ make it const
這里, ABC(obj)
調用基類copy-constructor,傳遞obj
作為引用。
請注意,你是私下固執的ABC
。
class ConcreteDerivedClass: private ABC
我認為你需要的是public
繼承:
class ConcreteDerivedClass: public ABC
搜索private
繼承和public
繼承以了解它們之間的區別。 您將在本網站上找到許多主題。 :-)
你不能,因為編譯器會為你生成一個默認的復制構造函數。 然而,你的例子並沒有錯。 你從派生類調用的不是復制構造函數。
根據這一點,它必須是一個參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.