inf*_*oop 1 c++ oop virtual casting base-class
我的代码:
#include <iostream>
using namespace std;
class A
{
public:
virtual void print(void) { cout << "I am base class" << endl; }
};
class B : public A
{
public:
void print(void) { cout << "I am class B" << endl; }
};
void mainprint(A *a)
{
(*a).print();
}
int main()
{
A a;
B b;
B *bp;
A *ap;
ap = &b;
a.print();
b.print();
(*ap).print();
bp = new B();
mainprint((A *)bp);
delete bp;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
I am base class
I am class B
I am class B
I am class B
Run Code Online (Sandbox Code Playgroud)
我已经将指针(bp)转换为函数调用内的A类,但它仍然调用派生类print!
有人可以为我阐明这一点.
我已经将指针(bp)转换为函数调用中的A类,但它仍然调用基类打印!
我假设你的意思是"调用派生类打印",因为那就是发生的事情.
这就是虚函数的重点; 无论用于调用函数的引用或指针的类型(即"静态类型"),都选择与对象的实际类型(即"动态类型")相关联的最终覆盖.因此B::print被选中,因为bp仍然指向一个实例B.
如果您想强制拨打电话A::print,您可以:
pb->A::print()
Run Code Online (Sandbox Code Playgroud)
或者,如果您根本不想要多态行为,请删除virtual规范.
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |