eSe*_*rus 10 c++ polymorphism class
我有子类化和使用方法的问题.
我创建了一个类的实例B并将其存储为指针A.但是当我使用指针调用重载方法时,输出是"A"而不是"B".为什么?
这适用于其他语言,我做错了什么?
#include <iostream>
using namespace std;
class A {
public:
void f() {
cout << "A";
}
};
class B : public A {
public:
void f() {
cout << "B";
}
};
int main() {
A *a = new B();
a->f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
sya*_*yam 21
f()需要virtual在基类A中声明:
class A {
public:
virtual void f() {
cout << "A";
}
};
Run Code Online (Sandbox Code Playgroud)
您已经使用过的其他语言可能默认使用虚方法,但C++不支持(不支付您不使用的内容:虚方法在调用它们时会产生间接,这意味着它们比正常方法调用稍慢) .
通过添加virtual,绑定将被推迟到运行时(称为动态绑定),并且f()将根据值的类型决定哪个函数调用.
因为您没有将函数声明f()为虚拟,所以绑定是静态的(在编译时)并且将使用变量类型(但不是值)来确定f()要调用的函数.所以在你现在的代码中,语句a->f();调用A类是f()因为a是指向类的指针A.