c++ - 如何在 C++ 中覆盖这个虚拟运算符?

标签 c++ class

基础结构在头文件中是这样定义的:

struct Base {
    virtual operator char * (void) {
        return 0;
    }
    virtual operator long (void) {      // hash function
        return 0;
    }
    virtual long operator == (Base & base) {// isequal function
        return *this == base;
    }
    Base (void) {}              // new_element
    virtual ~Base (void) {}         // delete_element
    virtual ostream & Write (ostream & stream) = 0;// write_element
};

我对前两个虚运算符声明感到困惑,假设我有一个新类继承了基类,我该如何重写这两个运算符,以便当子类对象被视为基类时,这两个函数可以叫什么?

最佳答案

就像您覆盖的任何其他函数一样。

#include <iostream>
#include <vector>
using namespace std;

struct A
{
    virtual operator char * (void) 
    {
        return 0;
    }
};

struct B : A
{
    operator char * (void) override
    {
        return (char*)12;
    }
};

struct C : A
{
    operator char * (void) override
    {
        return (char*)24;
    }
};

int main() 
{
    vector<A*> v;
    v.push_back(new A);
    v.push_back(new B);
    v.push_back(new C);

    for (auto e : v)
    {
        char* p = *e;
        cout << "p=" << (int)p << endl;
    }

    for (auto e : v)
    {
        delete e;
    }

    return 0;
}

这将打印:

p=0
p=12
p=24

关于c++ - 如何在 C++ 中覆盖这个虚拟运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36963684/

相关文章:

c++ - 函数原型(prototype)范围的有趣用法

c++ - 扩展列表的大小

java - 为什么我的数组会出现 NullPointer 异常?

Javascript - 如何验证类构造函数的参数是否存在

尽管赋值,Javascript 类属性仍返回未定义

C# .NET GetHashCode函数问题

C++ - 对 'Class::variable' 的 undefined reference

c++ - 433 接收器 Arduino if 语句

c++ - 在不复制代码的情况下从工厂实例化对象(例如炮塔)的草图(即原型(prototype))

python - Python 中用于存储键值对的类与字典