欢迎来到天天文库
浏览记录
ID:37909815
大小:43.50 KB
页数:4页
时间:2019-06-02
《C++实验十一虚函数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验十一虚函数一、实验目的1)掌握虚函数的定义和使用2)掌握抽象类的定义和使用3)掌握纯虚函数的定义4)掌握虚析构函数、纯虚函数和抽象类的作用二、实验原理1.利用虚函数的作用:当编译器编译虚函数时,编译系统将用动态连接的方式进行编译。即在编译时不确定该虚函数的版本,而是利用一种机制在运动过程中根据其所指向的实例决定使用哪一个函数版本。2.利用虚析构函数的原则:当将基类指针或引用new运算符指向派生类对象时,为了在释放派生类对象时能调用派生类的析构函数,必须将基类的析构函数定义为虚函数。3.抽象类的作用:为
2、它的所有派生类提供一个公共接口,纯虚函数是定义抽象类的一种间接手段。三、实验设备实验室里调备的计算机、windowxp,visualc++6.0四、实验内容4.1分析下面各题程序,按各题的要求进行实验1)分析下面的程序,指出程序运行的结果:#includeclassCBase{public:virtualvoidf1()//将成员函数f1()声明为虚函数{cout<<"调用函数CBase::f1()!"<3、{cout<<"调用函数CBase::f2()!"<4、voidmain(){CBaseobj1,*p;//定义CBase的对象obj1和指针对象pCDerivedobj2;//定义CDerived的对象obj1p=&obj1;//将obj1的地址给pp->f1();//通过p调用基类版本的f1()函数p->f2();//通过p调用基类版本的f2()函数p->f3();//通过p调用基类版本的f3()函数p=&obj2;//将派生类对象obj2的地址赋给pp->f1();//动态连接,调用派生类版本p->f2();//动态连接,调用派生类版本p->f3();/5、/调用基类版本}运行的结果:2)分析下面的程序,指出程序运行的结果:#includeclassCBase{public:CBase()//CBase类的构造函数{cout<<"调用构造函数CBase()!"<6、rived类的构造函数{cout<<"调用构造函数CDerived()!"<#includeclassCBase{protected:char*ch;public:CBase7、(char*x){ch=newchar[20];strcpy(ch,x);}virtualvoidfun()=0;virtualvoidfun1()//虚函数{cout<8、];strcpy(ch,x);}voidfun1()//{cout<fun1();p->fun();p=newCDerived("China","Hello");p->f
3、{cout<<"调用函数CBase::f2()!"<4、voidmain(){CBaseobj1,*p;//定义CBase的对象obj1和指针对象pCDerivedobj2;//定义CDerived的对象obj1p=&obj1;//将obj1的地址给pp->f1();//通过p调用基类版本的f1()函数p->f2();//通过p调用基类版本的f2()函数p->f3();//通过p调用基类版本的f3()函数p=&obj2;//将派生类对象obj2的地址赋给pp->f1();//动态连接,调用派生类版本p->f2();//动态连接,调用派生类版本p->f3();/5、/调用基类版本}运行的结果:2)分析下面的程序,指出程序运行的结果:#includeclassCBase{public:CBase()//CBase类的构造函数{cout<<"调用构造函数CBase()!"<6、rived类的构造函数{cout<<"调用构造函数CDerived()!"<#includeclassCBase{protected:char*ch;public:CBase7、(char*x){ch=newchar[20];strcpy(ch,x);}virtualvoidfun()=0;virtualvoidfun1()//虚函数{cout<8、];strcpy(ch,x);}voidfun1()//{cout<fun1();p->fun();p=newCDerived("China","Hello");p->f
4、voidmain(){CBaseobj1,*p;//定义CBase的对象obj1和指针对象pCDerivedobj2;//定义CDerived的对象obj1p=&obj1;//将obj1的地址给pp->f1();//通过p调用基类版本的f1()函数p->f2();//通过p调用基类版本的f2()函数p->f3();//通过p调用基类版本的f3()函数p=&obj2;//将派生类对象obj2的地址赋给pp->f1();//动态连接,调用派生类版本p->f2();//动态连接,调用派生类版本p->f3();/
5、/调用基类版本}运行的结果:2)分析下面的程序,指出程序运行的结果:#includeclassCBase{public:CBase()//CBase类的构造函数{cout<<"调用构造函数CBase()!"<6、rived类的构造函数{cout<<"调用构造函数CDerived()!"<#includeclassCBase{protected:char*ch;public:CBase7、(char*x){ch=newchar[20];strcpy(ch,x);}virtualvoidfun()=0;virtualvoidfun1()//虚函数{cout<8、];strcpy(ch,x);}voidfun1()//{cout<fun1();p->fun();p=newCDerived("China","Hello");p->f
6、rived类的构造函数{cout<<"调用构造函数CDerived()!"<#includeclassCBase{protected:char*ch;public:CBase
7、(char*x){ch=newchar[20];strcpy(ch,x);}virtualvoidfun()=0;virtualvoidfun1()//虚函数{cout<8、];strcpy(ch,x);}voidfun1()//{cout<fun1();p->fun();p=newCDerived("China","Hello");p->f
8、];strcpy(ch,x);}voidfun1()//{cout<fun1();p->fun();p=newCDerived("China","Hello");p->f
此文档下载收益归作者所有