1、实验十一 继承与派生(一)
1、 实验目的
掌握利用单继承和多重继承的方式定义派生类的方法;深刻理解在各种继承方式下构造函数和析构函数的执行顺序;理解和掌握公有继承、私有继承和保护继承对基类成员的访问机制;理解虚基类的概念以及引入虚基类的目的和作用。
2、 实验内容
(1) 将书上例5.1的程序片段补充和改写成一个完整、正确的程序,用公用继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。
#include "stdafx.h"
#include
#include 2、ing>
using namespace std;
class Student
{public:
void get_value()
{cin>>num>>name>>sex;}
void display( )
{cout<<"num: "<3、lic Student
{public:
void get_value_1()
{cin>>age>>addr;}
void display_1()
{
cout<<"age: "<4、ud1.get_value_1();
stud1.display();
stud1.display_1();
return 0;
}
(2) 将书上例5.2的程序片段补充和改写成一个完整、正确的程序,用私有继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。
#include
#include
using namespace std;
class Student
{public:
void display( )
{c
5、out<<"num: "<6、
cout<<"address: "<
#include
using names
7、pace std;
class Student //声明基类
{public: //基类公用成员
void display( );
protected : //基类保护成员
int num;
string name;
char sex;
};
void Student::display( )
{cout<<"num: "<8、out<<"name: "<9、 //引用基类的保护成员,合法
cout<<"name: "<10、//stud1是派生类student2的对象
stud1.display1( ); //display是派生类中的公用成员函数
return 0;
}
(4) 有以下程序结构,请分析访问属性。
class A//A为基类
{public:
void f1( );
int i;
protected:
void f2( );
int j;
private:
int k;
};
class B: public A //B为A的公用派生类
{public:
void f3( );
11、
protected:
int m;
private:
int n;
};
class C: public B //C为B的公用派生类
{public:
void f4( );
private:
int p;
};
int main( )
{A a1; //a1是基类A的对象
B b1; //b1是派生类B的对象
C c1; //c1是派生类C的对象
return 0;
}
12、问:
(1) 在main函数中能否用b1.i,b1.j和b1.k引用派生类B对象b1中基类A的成员?I,j,f2可以,k不可以
(2) 派生类B中的成员函数能否调用基类A中的成员函数f1和f2?T
(3) 派生类B中的成员函数能否引用基类A中的数据成员i,j,k? i,j可以,k不可以
(4) 能否在main函数中用c1.i,c1.j,c1.k,c1.m,c1.n,c1.p引用基类A的成员i,j,k,派生类B的成员m,n,以及派生类C的成员p?
(5) 能否在main函数中用c1.f1(),c1.f2(),c1.f3()和c1.f4()调用f1,f2,f3,f4成员函数?T
(6) 派生类C的成员函数f4能否调用基类A中的成员函数f1,f2和派生类中的成员函数f3?T
3、 实验小结