BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #16952同步于 2008/12/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

虚函数调用

as1302001954
2008/12/1镜像同步13 回复
#include <iostream> using namespace std; //定义基类 class Base { public: virtual void Show(){cout<<"Base"<<endl;} }; //定义派生类 class Derive:public Base { public: virtual void Show(){cout<<"Derive"<<endl;} }; //主函数 int main() { Derive D; Base B,&Bs=D; Bs=B; Bs.Show(); return 0; } 运行结果:Derive 为什么结果不是 Base?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
xieys机器人#1 · 2008/12/1
不怎么会C++的人不负责任的说: &Bs=D; 之后,Bs与D的地址变成了一样 可以把Bs看成D的别名 Bs=B; 改变了D的基类部分(本例中没有变), 自己新增的部分并没有变 所以输出是派生类的东西 【 在 as1302001954 的大作中提到: 】 : #include <iostream> : using namespace std; : //定义基类 : ...................
sunway机器人#2 · 2008/12/1
&是引用 【 在 xieys (枫叶/兄弟会悄悄堂堂主/借楼同征外援) 的大作中提到: 】 : 不怎么会C++的人不负责任的说: : &Bs=D; 之后,Bs与D的地址变成了一样 : 可以把Bs看成D的别名 : ...................
xieys机器人#3 · 2008/12/1
恩,左值! 【 在 sunway 的大作中提到: 】 : &是引用
sunway机器人#4 · 2008/12/1
#include <iostream> using namespace std; //定义基类 class Base { public: int val; virtual void Show(){cout<<"Base"<<val<<endl;} Base (int val):val (val) {} }; //定义派生类 class Derive:public Base { public: virtual void Show(){cout<<"Derive"<<val<<endl;} Derive (int val):Base (val) {} }; //主函数 int main() { Derive D (1); Base B (2),&Bs=D;//Bs是一个B对象的引用,它的vptr里Show函数指向Derive版本 Bs=B;//B的vptr里show函数指向Base版本,B有虚函数,即不具备bit-wise copy语义,不会bitwise copy,vptr不会被改成B的,但val会被改成B的 Bs.Show(); return 0; } 引用是变量的别名,修改引用就是修改那个变量,不能通过修改引用让它"指"向另一个变量 【 在 as1302001954 (as1302001954) 的大作中提到: 】 : 标 题: 虚函数调用 : 发信站: 北邮人论坛 (Mon Dec 1 10:29:44 2008), 站内 : : #include <iostream> : using namespace std; : : //定义基类 : class Base : { : public: : virtual void Show(){cout<<"Base"<<endl;} : }; : //定义派生类 : class Derive:public Base : { : public: : virtual void Show(){cout<<"Derive"<<endl;} : }; : : //主函数 : int main() : { : Derive D; : Base B,&Bs=D; : : Bs=B; : Bs.Show(); : return 0; : } : 运行结果:Derive : 为什么结果不是 Base? : -- :
loolo机器人#5 · 2008/12/1
对象引用不是只能被初始化不能被赋值的么?
prating机器人#6 · 2008/12/1
【 在 loolo 的大作中提到: 】 : 对象引用不是只能被初始化不能被赋值的么? LZ的程序就是只有引用,没有赋值呀
loolo机器人#7 · 2008/12/2
Bs=B; 这个不就是在赋值么?。。。。 【 在 prating 的大作中提到: 】 : LZ的程序就是只有引用,没有赋值呀
zwp机器人#8 · 2008/12/2
引用被初始化后好像就不能引用其他变量了。即使被引用其他变量也还是引用初始化时的变量。(很不负责任的说法,呵呵)。
prating机器人#9 · 2008/12/2
【 在 loolo 的大作中提到: 】 : Bs=B; : 这个不就是在赋值么?。。。。 这只是给Bs赋值 并不是给&Bs赋值阿