首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

向上映射有关问题

2013-04-02 
向上映射问题#include iostreamusing namespace stdclass A{public:virtual void print(void){coutA

向上映射问题

#include <iostream>
using namespace std;
class A
{
public:virtual void print(void)
{
cout<<"A::print()"<<endl;
};
};
class B:public A
{
public:virtual void print(void)
{
cout<<"B::print()"<<endl;
};
};
class C:public A
{
public:void print(void)
{
cout<<"C::print()"<<endl;
};
};
void print(A a)
{
a.print();
}

int main(void)
{
A a,*pa,*pb,*pc;
B b;
C c;
pa = &a;
pb = &b;
pc = &c;

a.print();
b.print();
c.print();
pa->print();
pb->print();
pc->print();

print(a);//这里与上面,pa=&a的差别是什么?求解
print(b);
print(c);
return 0;
}

[解决办法]
pa=&a,就取了个址,没构造,
print(a)走了个拷贝构造;
[解决办法]
向上类型转换仅处理地址。。当 pb->print(),pc->print()时,由于pb,pc都是地址,遇到virtual时,编译器实现晚捆绑(运行时捆绑);而 print(b);print(c),将b,c转换成a,已经是确切的类型了,编译器直接采用早捆绑。。

热点排行