c++ - cout 上具有抽象类的多态性

原文 标签 c++ class polymorphism operator-overloading

我有抽象类(类“父亲”)和儿子类

我想在父亲身上写下运算符 << 并在儿子身上实现

这里的代码

#include <iostream>

using namespace std;

class father {
    virtual friend ostream& operator<< (ostream & out, father &obj) = 0;

};

class son: public father  {
    friend ostream& operator<< (ostream & out, son &obj)
    {
        out << "bla bla";
        return out;
    }
};
void main()
{
    son obj;
    cout << obj;

}

我收到 3 个错误

错误 3 错误 C2852 : 'operator <<' : 只有数据成员可以在类中初始化

错误 2 错误 C2575 : 'operator <<' : 只有成员函数和基可以是虚拟的

错误 1 ​​错误 C2254:“<<”:友元函数上不允许纯说明符或抽象覆盖说明符

请问我能做什么?

最佳答案

虽然你不能做一个运算符 virtual ,你可以让它们调用一个普通的虚函数,像这样:

class father {
    virtual ostream& format(ostream & out, father &obj) = 0;
    friend ostream& operator<< (ostream & out, father &obj) {
        return format(out, obj);
    }
};

class son: public father  {
    virtual ostream& format(ostream & out, son &obj) {
        out << "bla bla";
        return out;
    }
};

只有一个operator <<现在,但是 father 的每个子类可以通过覆盖虚拟成员函数format 来提供自己的实现.

关于c++ - cout 上具有抽象类的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33711460/

相关文章:

c++ - 在 gtests 中测试 C++ 全局变量的最佳方法

c++ - 使用未声明的标识符 'Token'

java - 如何从Java中的字符串解析运算符

java - 如何有效浏览Java中的扩展和实现?

java - 获取对调用父类(super class)方法的对象的引用

c++ - 父访问子私有(private)/ protected

c++ - int foo(type&bar);是不好的做法吗?

c++ - 分离 ECDSA key 对的公钥和私钥

java - 在java中导入一个类

java - 无法使用 Jar 文件找到或加载主类