20170812_继承与多态测试实例
来源:互联网 发布:李易峰睡杨幂 知乎 编辑:程序博客网 时间:2024/06/05 02:52
20170812_继承与多态测试实例
/*多态测试*/#include<iostream>#include<vector>#include<numeric>using namespace std;//基类Baseclass base{public:void fun(){cout<<"I am base::fun()!"<<endl;}virtual void test(){cout<<"I am base::test()!"<<endl;}};//派生类childclass child:public base{public:void fun(){cout<<"I am child::fun()!"<<endl; //非虚函数fun,隐藏}virtual void test(){cout<<"I am child::test()!"<<endl; //虚函数,重定义,覆盖}};int main(void){//1、对象调用:不是多态!(对象是谁的,就调用谁的函数,不管是不是虚函数!)class base baseobject1;baseobject1.fun();//basebaseobject1.test();//baseclass child childobject1;childobject1.fun();//childchildobject1.test();//childcout<<endl;//2、指针调用:不是多态!class base baseobject2;class base *p_baseobject2=&baseobject2;//基类指针指向基类对象:p_baseobject2->fun();//basep_baseobject2->test();//baseclass child childobject2;class child *p_childobject2=&childobject2;//派生类指针指向派生类对象:p_childobject2->fun();//childp_childobject2->test();//childcout<<endl;//3、指针调用:是多态!(基类指针指向谁,就调用谁的函数,派生类继承来的虚函数进行了重定义!)class child childobject3;class base *p_baseobject3=&childobject3;//基类指针指向派生类对象:p_baseobject3->fun();//base(非虚函数,基类指针指向的是派生类中的基类部分!)p_baseobject3->test();//child(虚函数,这就是:多态性!!!)cout<<endl;//4、上行转换:派生类指针—>基类指针(编译器默认是支持的,也即是可以隐式转换)//上行转换的效果:类似于多态。。。。。。class child childobject4;class child *p_childobject4=&childobject4;class base *p_baseobject4=static_cast<base *>(p_childobject4);p_baseobject4->fun();//base:因为是非虚函数,根据指针类型来调用,也就是根据指针所属的类的类型来调用。p_baseobject4->test();//child:因为是虚函数,根据指针所指向的对象来调用,调用该对象的函数。cout<<endl;//5、下行转换:基类指针->派生类指针(编译器不支持,需要显示强制类型转换)//下行转换的效果:跟上行转换反过来,是什么鬼?。。。。。。class child childobject5;class base *p_baseobject5=&childobject5;class child *p_childobject5=static_cast<child *>(p_baseobject5);p_childobject5->fun();//child:因为是非虚函数,所以根据指针类型来调用,也就是根据指针所属的类的类型来调用。p_childobject5->test();//child:因为是虚函数,所以根据指针所指向的对象来调用,调用该对象的函数。cout<<endl;system("pause");return 0;}/*答案输出:I am base::fun()!I am base::test()!I am child::fun()!I am child::test()!I am base::fun()!I am base::test()!I am child::fun()!I am child::test()!I am base::fun()!I am child::test()!I am base::fun()!I am child::test()!I am child::fun()!I am child::test()!*/
阅读全文
0 0
- 20170812_继承与多态测试实例
- 20180818_继承与多态测试2
- 黑马程序员_继承与多态
- 黑马程序员_多态与继承
- 黑马程序员_继承与多态
- 实例看继承与多态
- 爪哇爪瓜_继承与多态
- HeadFirstJava——7_继承与多态
- java学习笔记3_继承与多态
- Hibernate_11_继承实例_多表
- C++_多继承与虚基类
- C++_多继承与虚基类
- C++_多继承与虚基类
- java中继承与多态典型实例
- 相等测试与继承
- <Head first Java>继承与多态_重载与覆盖
- C++_继承与派生
- C++_继承与派生
- AddBinary
- 关于除法的细节问题。。。蛋疼。。
- 第一个网站搭建过程额(2)
- python练习(十二)
- H
- 20170812_继承与多态测试实例
- ucos2中涉及到的英文
- hadoop学习网站
- LeetCode 343. Integer Break
- 安装windows_server2008配置外网可以访问的数据库
- 2017——8.12——二分
- HDU 3247 AC自动机+状压DP
- 剑指offer 旋转数组的最小数字
- 手机验证码等待功能