gpt4 book ai didi

c++ - 来自虚拟基类的多态运算符<<

转载 作者:行者123 更新时间:2023-11-27 22:58:04 24 4
gpt4 key购买 nike

我想重载 Operator<< 以在多态类的上下文中执行专门的操作。举一个我想要的直接例子(以 int 为例):

Base* a = new A;
(*a) << 10;

我想使用这种语法,因为我程序的另一部分使用 << 执行相同的操作,但在非多态类上。

问题是,Base 是纯虚拟的,我不知道如何在没有完整、有效的 Base 类的情况下实现这种系统。例如:

class Base
{
public:
virtual void aVirtualFunction() = 0;
virtual Base operator<<( int ) = 0;
};

class A : public Base
{
Base operator<<( int )
{
// Do something
}
};

class B : public Base
{
Base operator<<( int )
{
// Do something
}
};

这会产生错误,因为 Base 是抽象的。

我不能只将重载放在继承的类中,因为我需要从指向基类的指针访问运算符而不强制转换为子类。

我的问题与 Overloading << operator with polymorphism 中提出的问题非常相似,除了我的基类本身不是一个有效的对象。

最佳答案

您的代码不起作用,因为您无法返回 Base对象,因为它是纯虚拟的。返回对 Base 的引用相反。

然后,使用标准继承就可以轻松处理整个事情。考虑以下代码:

class Base
{
public:
virtual void aVirtualFunction() = 0;
virtual Base& operator<<( int ) = 0;
};

class A : public Base
{
virtual A& operator<<( int ) override
{
// Do something
return *this;
}
};

class B : public Base
{
virtual B& operator<<( int ) override
{
// Do something
return *this;
}
};

DEMO

请注意 operator<<(int) 的重载不要返回 Base& ,而是 A&B& .这称为协方差

关于c++ - 来自虚拟基类的多态运算符<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30608519/

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