gpt4 book ai didi

c++ - 抽象类和继承的问题

转载 作者:行者123 更新时间:2023-11-28 02:41:32 24 4
gpt4 key购买 nike

假设我有这两个类:

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 以来,我不太清楚该怎么做是抽象的,所以我不能创建这种类型的对象来制作拷贝。

好的,还有一个问题。如果我重载<<运算符(operator):

    std::ostream& operator<<(std::ostream& os, const tmp& t){
return os<<t.a<<endl;
}

然后尝试这样做:

cout<<*x<<endl;

我得到一个错误 no match for 'operator<<'这是为什么?

最佳答案

您正在寻找 prototype pattern ,通常也称为克隆模式

基本上是一个纯虚方法

virtual std::unique_ptr<num> clone() const = 0;

...您在 num 中声明的,将被每个派生类覆盖。然后,您只需调用 x->clone(); 即可获得正确类型的全新对象。

关于c++ - 抽象类和继承的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25809408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com