当前位置:文档之家› 实验2继承与派生讲解

实验2继承与派生讲解

继承与派生实验2实验目的2.1类的继承,能够定义和使用类的继承关系。

1.熟练掌握派生类的声明与实现方法。

2.掌握 3.掌握类构造函数的初始化列表与作用域分辨符的使用方法。

虚基类在解决二义性问题中的作用。

4.理解2.2 实验工具与准备工作在开始实验前,应回顾或复习相关内容。

Visual C++6.0等集成开发环境软件。

需要一台主算机,其中安装有 2.3 实验内容 1.先阅读下列程序,写出执行结果。

然后输入程序,调试程序,比较结果的正确性。

// 文件名: main.cpp#include <iostream> // 预处理命令// 使用标准命名空间stdusing namespace std;class A{public:: 公有函数//?笩挠畯??尠构造A << endl; } // 构造函数// A << endl; } 析构函数???潣瑵?? 析构};class B: public A{public:: 公有函数//// 构造函数B << endl; } ?笩挠畯??尠构造// 析构B << endl; } 析构函数???潣瑵??};class C: public B{public:: // 公有函数// 构造函数C << endl; } 构造?笩挠畯??尠C << endl; } 析构???潣瑵?? 析构函数//};main(void)主函数// int main(void){定义对象C obj; //,输出系统提示信息调用库函数system( )// system(PAUSE);0, 返回操作系统// 返回值return 0;}2.先阅读下列程序,写出执行结果。

然后输入程序,调试程序,比较结果的正确性。

// 文件名: main.cpp#include <iostream> // 预处理命令using namespace std; // 使用标准命名空间stdclass A{protected:// 数据成员:int a; // 数据成员public:// 公有函数:A(int x): a(x){ } // 构造函数void Show() const{ cout << a << endl; } // 显示a之值};class B{protected:// 数据成员:int b; // 数据成员public:// 公有函数:B(int x): b(x){ } // 构造函数void Show() const{ cout << b << endl; } // 显示a与b之值};class C: public A, public B{public:// 公有函数:C(int x, int y): A(x), B(y){ } // 构造函数void Show() const // 显示b之值{ cout << a << , << b << endl; }};int main(void) // 主函数main(void){C obj(5, 18); // 定义对象obj.Show(); // 显示相关信息obj.A::Show(); // 显示相关信息obj.B::Show(); // 显示相关信息system(PAUSE); // 调用库函数system( ),输出系统提示信息return 0; // 返回值0, 返回操作系统},请完成程3.程序填空。

下面程序主要测试类构造函数的初始化列表与作用域分辨符序。

: main.cpp 文件名//预处理命令// #include <iostream>std 使用标准命名空间// using namespace std;class A{private:: 数据成员//数据成员// int a;public:: 公有函数//构造函数// a(x) { } A(int x):之值显示a // void Show() const{ cout << a: << a << endl; }};class B: public A{protected:: 数据成员//数据成员// int b;public:: 公有函数//构造函数// A(x) , b(y){ } B(int x, int y):显示相关信息// void Show() const{A::Show(); // 调用基类A的成员函数Show()cout << : << b << endl; // 显示b之值}};int main(void) // 主函数main(void){B obj(5, 18); // 定义对象obj.Show(); // 显示相关信息system(PAUSE); // 调用库函数system( ),输出系统提示信息return 0; // 返回值0, 返回操作系统}4.改正下面程序中的错误,使其能正常运行。

// 文件名: main.cpp //1//2 #include <iostream> // 预处理命令//3 std using namespace std; // 使用标准命名空间//4//5 // 基类Base//6 class Base//7 {//8 private://9: 数据成员//int m; // 数据成员//10//11//12 public://13 // 公有函数://14 Base(int a): m(a){ } // 构造函数//15 Base(const Base &copy) {m=copy.m } // 复制构造函数//16 // 显示m之值void Show() const//17 { cout << m: << m << endl; }//18 };//19//20 // 派生灰Derived//21 class Derived: private Base//22 {//23 protected://24 // 数据成员://25 // 数据成员int n;//26//27 public://28// 公有函数:Derived(int a, int b): Base(a) ,n(b){ } // 构造函数//29//30 void Show() const // 显示相关信息//31` {//32 // 调用基类Base的成员函数Show() Base::Show();//33 cout <<: << n << endl; // 显示n之值//34 }//35 };//36int main(void) // 主函数main(void)//37//38 {//39 Derived obj(10, 18); // 定义对象//40 obj.Show(); // 显示相关信息//41//42,输出系统提示信息system( ) system(PAUSE); // 调用库函数return 0; 返回操作系统0,// 返回值//43//44}5.定义Person(人)类,由Person分别派生出Teacher(教师)类和Cadre(干部)类,再由Teacher(教师)类和Cadre(干部)类采用多重继承方式派生出新类TeacherCadre(教师兼干部)类,各类之间的继承关系如图1.1所示。

Person TeacherCadreTeacherCadre2.1 各类之间的继承关系图要求:(1)在Person类中包含的数据成员有姓名(name)、年龄(age)、性别(sex)。

在TeacherTeacherCadre在,(post)类中还包含数据成员职务Cadre在,(title)类还包含数据成员职称.类中还包含数据成员工资(wages)。

(2)在类体中定义成员函数。

(3)每个类都有构造函数与显示信息函数(Show)。

#include<iostream>using namespace std;class Person{private:char name[20];int age;char sex[20];public:Person(char *n,int a,char *s):age(a){strcpy(name,n);strcpy(sex,s);}void Show(){cout<<ame:<<name<<\<<age:<<age<<\<<sex:<<sex<<endl;}};class Teacher:virtual public Person{private:char title[20];public:Teacher(char *n,int a,char *s,char *t):Person(n,a,s){strcpy(title,t);} void Show(){cout<< itle:<<title<<endl;}};class Cadre:virtual public Person{private:char post[20];public:Cadre(char *n,int a,char *s,char *p):Person(n,a,s){strcpy(post,p);}void Show(){cout<<post:<<post<<endl;}};class TeacherCadre:public Teacher,public Cadre{private:double wages;public:*p,double *s,char *t,char TeacherCadre(char *n,int a,charw):Person(n,a,s),Teacher(n,a,s,t),Cadre(n,a,s,p),wages(w){}void Show(){Person::Show();Teacher::Show();Cadre::Show();cout<<wages:<<wages<<endl;}};void main(){,6000); 教学?教授? 敔捡敨?摡敲漠橢尨李顺??尬男obj.Show();}(经Manager分别派生出Saleman(销售员)类和6.定义Staff(员工)类,由Staff(经理)类采用多重继承方式派生出新类Manager理)类,再由Saleman(销售员)类和所示。

相关主题