C++ 真正的方法重载?

标签 c++ overloading

我有类 ABB 派生自 A 并重载方法 WhoAreYou(),当我现在创建一个类型为 A 的变量并且将值设置为B对象,然后调用WhoAreYou(),调用A的方法。看看这个:

class A{
public:
    virtual void WhoAreYou(){
        cout << "I am A!"<<endl;
    }
};
class B: public A{
public:
    void WhoAreYou(){
        cout << "I am B!" << endl;
    }
};


int main(int argc, char ** argv){
    A a = B();
    a.WhoAreYou(); //Output: I am A!
}

有没有办法重载该方法,以便在这种情况下调用 B 的 WhoAreYou() 方法?当我必须首先转换对象时,方法重载在我看来并没有真正意义......

感谢您的帮助!

最佳答案

您的“a”变量是 A,而不是 B。A a = B();创建一个新的临时 B,然后通过复制 B 的 A 部分创建一个 A。

试试这个:

B b;
A * a = &b;
a->WhoAreYou();

关于C++ 真正的方法重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5065914/

相关文章:

c++ - 使用 new 运算符创建对象导致无法解析的外部符号错误 C++ FTGL

c++ - 没有匹配的函数来调用 ‘std::basic_ifstream<char>::basic_ifstream(QString&)’

c++ - 如何在控制台中正确显示二叉搜索树?

c++ - 如何重载 + 运算符,以便可以编写 newVacation = oldVacation + 5,//将 5 添加到 numDays,同时仅复制 numPeople

c++ - 如果运算符是常量,运算符 << 重载通常会失败?

c++ - 使文件头文件依赖

C++ kbhit 与 if 语句滞后

c# - 能否在 ASP.NET MVC 中重载 Controller 方法?

python - types 模块中的重载装饰器似乎没有按预期运行

c++ - 重载多个运算符时出现“不匹配”错误