C++ 抽象类和继承的问题
假设我有这两个类:C++ 抽象类和继承的问题,c++,inheritance,abstract-class,C++,Inheritance,Abstract Class,假设我有这两个类: 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
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
是抽象的,所以我不能创建这种类型的对象来制作副本
好的,还有一个问题。
如果我重载了您正在寻找的,通常也称为克隆模式
这基本上是一种纯粹的虚拟方法
virtual std::unique_ptr<num> clone() const = 0;
virtualstd::unique_ptr clone()const=0;
。。。在num
中声明由每个派生类重写的。然后只需调用x->clone()
以获得正确类型的全新对象。您需要一个虚拟函数来根据对象的动态类型克隆对象。它必须返回一个(最好是智能的)指针,指向新分配的正确类型的对象。例如:
class num {
public:
virtual std::unique_ptr<num> clone() const = 0;
// other members...
};
class my_num : public num {
public:
virtual std::unique_ptr<num> clone() const {
return std::make_unique<my_num>(*this);
}
// other members...
};
int main() {
num* x = &get(...);
auto y = x->clone();
}
class-num{
公众:
虚拟std::unique_ptr clone()const=0;
//其他成员。。。
};
类my_num:public num{
公众:
虚拟std::unique_ptr clone()常量{
return std::make_unique(*this);
}
//其他成员。。。
};
int main(){
num*x=&get(…);
自动y=x->clone();
}
只需使用tmp
的复制构造函数?我使用num*
是因为我不知道get
返回什么。它可以是tmp
或从num
继承的其他类型。所以我不能使用课程的特定副本构造函数。大脑打嗝。
virtual std::unique_ptr<num> clone() const = 0;
class num {
public:
virtual std::unique_ptr<num> clone() const = 0;
// other members...
};
class my_num : public num {
public:
virtual std::unique_ptr<num> clone() const {
return std::make_unique<my_num>(*this);
}
// other members...
};
int main() {
num* x = &get(...);
auto y = x->clone();
}