实验2继承及派生讲解.doc

合集下载

继承与派生

继承与派生

实验四继承与派生实验名称:继承与派生学时安排:4实验类别:设计性实验实验要求:1人1组一、实验目的和任务1.理解继承的含义;2.学习从现有类派生出新类的方式;3.了解在派生类中如何使用基类的成员。

二、实验设备介绍软件需求: Visual C++ 6.0或VS2008硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB 以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。

三、实验内容和步骤1.新建一个雇员类,它的数据成员有雇员代号,年龄,工资,性别,姓名,输入雇员资料方法,打印雇员资料方法。

2.以此雇员类为基类,从中派生出教师类,其中要求在教师类中加入一个计算教师工资的方法,教师工资=基本工资(1000)+课时(月工作量)×30。

3.以此雇员类为基类,从中派生出实验员类,其中要求在实验员类中加入一个计算实验员工资的方法,实验员工资=基本工资(800)+实验室补助(150)+值班课时(月工作量)×5。

4. 以此雇员类为基类,从中派生出行政人员类,其中要求在行政人员类中加入一个计算行政人员工资的方法,行政人员工资=基本工资(2000)+行政补贴(200)。

5.编写一个完整的程序,要求用户从键盘输入雇员的信息,然后在屏幕显示这些信息。

【任务分解】【程序示例】文件Employee.hclass Employee{protected://补充完成数据成员定义public:……void inputEmployee(); // 用户从键盘输入雇员姓名和受聘日期void showEmployee(); // 显示雇员姓名和受聘日期};文件Teacher.h#include "Employee.h"class Teacher:补充完成代码{private:// 补充完成数据成员定义:如基本工资、课时量。

实验四:派生类和继承(一)

实验四:派生类和继承(一)

福建农林大学实验报告实验4 派生类和继承(一)一、实验目的和要求(1)掌握派生类的声明与定义方法,进一步理解类的继承的概念,能够定义和使用类的继承关系。

(2)熟悉公有派生和私有派生的访问特性。

二、实验内容和原理1、(1)定义一个基类Animal,该类具有私有整型成员变量age,weight,构造派生类Dog公有继承Animal。

Dog类新增私有成员变量color,新增成员函数SetAge(int n)中直接给age赋值,新增成员函数SetWeight(int m)中直接给weight赋值,查看编译结果,并分析结果。

(2)将类Anima l中的age和weight为公有成员,重做第一步,并分析结果。

(3)将类Animal中的age和weight 为保护成员,重做第一步,并分析结果。

(4)将派生类Dog的继承方式改为私有继承方式和保护继承方式重做以上各小题,并分析结果。

2、程序分析题(写出程序的输出结果,并分析结果)。

三、实验环境1. 硬件:PC机;2. 软件:Windows操作系统、Visual C++ 6.0四、算法描述及实验步骤1、(1):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<"The dog's age is "<<a.SetAge(x)<<endl;cout<<"The dog's age weight is"<<a.SetWeight(y)<<endl; return 0;}(2):#include <iostream.h>class animal{public:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(3):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}(4):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(5):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" T The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}(6):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(7):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}(8):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(9):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}2#include<iostream.h>class A{public: A(int i,int j){a=i;b=j;}void move(int x,int y){a+=x;b+=y;}void display(){cout<<"("<<a<<","<<b<<")"<<endl;} private:int a,b;};class B:public A{public: B(int i,int j,int k,int l):A(i,j),x(k),y(l){}void display(){cout<<x<<","<<y<<endl;}void fun1(){move(13,15);}void fun2(){A::display();}void fun3(){display();}private:int x,y;int main(){A aa(2,4);aa.display();B bb(5,6,7,8);bb.fun1();bb.fun2();bb.fun3();bb.A::display();bb.B::display();return 0;}五、调试过程1、调试程序,截图如下:原因分析:在public继承中void display 中的display打错成diaplay。

派生类

派生类

继承与派生类1 知识要点1.掌握继承和派生的定义,派生类的定义方法。

(1)掌握继承的两种类型:单继承和多继承。

(2)掌握private,public,protected三种继承方式的特点。

继承方式决定了基类中的成员在派生类中的属性。

三种继承方式的共同点:基类的private成员在派生类中不可见。

区别:对于私有继承,基类的public、protected成员在派生类中作为private成员;对于公有继承,基类的public、protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。

(3)掌握派生类中的构造函数和析构函数的使用。

基类的构造函数和析构函数不能继承,所以必要时在派生类中定义自己的构造函数和析构函数。

派生列的构造函数完成基类中新增数据成员和基类数据成员的初始化,基类数据成员的初始化通过基类构造函数来实现。

(4)掌握派生类的同名覆盖规则。

(5)掌握赋值兼容规则。

基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;基类类型指针可以指向派生类对象。

2.掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序。

派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),在执行对象成员所在类的构造函数(顺序按照他们在类中的声明顺序),最后执行派生类构造函数体中的内容。

3.掌握虚基类的概念和定义方法。

在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。

2 典型例题分析与解答例题1:下列对派生类的描述中,()是错误的。

A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。

第5章 派生类与继承

第5章 派生类与继承

void print();
};
print();
};
//定义一个基类 class person{ protected: char name[10]; int age; char sex; public: //…… }; //定义一个派生类 class employee:public person { protected: char department[20]; float salary; public: //…… };
当类的继承方式为私有继承时,基类的public成员和 protected成员被继承后作为派生类的private成员,派生类 的其他成员可以直接访问它们,但是在类外部通过派生类的 对象无法访问。
基类的private成员在私有派生类中是不可直接访问的, 所以无论是派生类成员还是通过派生类的对象,都无法直接 访问从基类继承来的private成员,但是可以通过基类提供 的public成员函数间接访问。 例5.1一个私有继承的例子
由于派生类继承了基类的成员,派生类的构造 函数需要调用基类的构造函数对其中定义于基 类的数据成员进行初始化。 给基类构造函数传递实际参数是通过向派生类 构造函数传递实际参数以及初始化列表来间接 实现传递的。
5.2.1 派生类构造函数和析构函数的执行顺 序 通常情况下,当创建派生类对象时, 首先执行基类的构造函数,随后再执行 派生类的构造函数; 当撤消派生类对象时,则先执行派生 类的析构函数,随后再执行基类的析构 函数。
例5.3 公有继承的访问规则
表5-3 公有继承的访问规则
基类成员 内部访问 对象访问 Private成员 不可访问 不可访问 public成员 可访问 可访问 protected成员 可访问 不可访问

继承派实验报告

继承派实验报告

一、实验目的1. 理解继承的概念及其在面向对象编程中的重要性。

2. 掌握不同继承方式(公有继承、私有继承、保护继承)下的基类成员在派生类中的访问权限。

3. 熟悉构造函数和析构函数在继承过程中的调用顺序和时机。

4. 培养动手实践能力,提高编程水平。

二、实验内容1. 创建一个基类`Base`,包含三个成员变量:`int`类型的`a`,`float`类型的`b`和`char`类型的`c`。

2. 创建三个派生类`DerivedPublic`,`DerivedPrivate`和`DerivedProtected`,分别采用公有继承、私有继承和保护继承的方式继承自基类`Base`。

3. 在每个派生类中添加一个构造函数,用于初始化基类成员和派生类特有的成员变量。

4. 在每个派生类中添加一个成员函数`display`,用于打印基类成员和派生类成员变量的值。

5. 在主函数中创建基类对象和派生类对象,并调用`display`函数打印成员变量的值。

三、实验步骤1. 创建基类`Base`,包含三个成员变量和相应的构造函数。

```cppclass Base {public:int a;float b;char c;Base(int a, float b, char c) : a(a), b(b), c(c) {}};```2. 创建三个派生类,分别采用公有继承、私有继承和保护继承的方式继承自基类`Base`。

```cppclass DerivedPublic : public Base {public:int d;DerivedPublic(int a, float b, char c, int d) : Base(a, b, c), d(d) {}void display() {cout << "DerivedPublic: a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << endl;}};class DerivedPrivate : private Base {public:int d;DerivedPrivate(int a, float b, char c, int d) : Base(a, b, c), d(d) {}void display() {cout << "DerivedPrivate: a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << endl;}};class DerivedProtected : protected Base {public:int d;DerivedProtected(int a, float b, char c, int d) : Base(a, b, c), d(d) {}void display() {cout << "DerivedProtected: a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << endl;}};```3. 在主函数中创建基类对象和派生类对象,并调用`display`函数打印成员变量的值。

(C++)实验报告六:继承与派生

(C++)实验报告六:继承与派生

实验6 继承与派生一、实验目的1.理解继承与派生、单继承与多继承的概念;2.理解基类与派生类的定义及使用方法,派生类对象的定义与初始化方法;3.理解继承与派生过程中,把派生类作为基类构成类族的概念及虚基类的概念。

二、实验环境一台PC机,Windows XP操作系统,Visual C++ 6.0开发环境。

三、实验内容1、由在校人员类(Person)作为基类派生出学生类(Student):实验步骤:#include <iostream>#include <string>using namespace std;class Person{public:Person(int i,char *n, char s, int a){ID=i;name=n;sex=s;age=a;};int getID(){return ID;}void show(){cout<<"ID: "<<ID<<endl;cout<<"name : "<<name<<endl;cout<<"sex: "<<sex<<endl;cout<<"age: "<<age<<endl;}private:int ID;string name;char sex;int age;};class Student:public Person{public:Student(int i,char *n,char s,int a,float m,float p,float e,float c):Person(i,n,s,a){math=m;physical=p;english=e;cpp=c;total=math+physical+english+cpp;}void show(){Person::show();cout<<"math: "<<math<<endl;cout<<"physical: "<<physical<<endl;cout<<"english: "<<english<<endl;cout<<"C++: "<<cpp<<endl;cout<<"total: "<<total<<endl;}private:float math,physical,english,cpp,total;};void main(){Person p1(1,"张帅",'M',22);p1.show();cout<<endl;Student s1(9901,"林维",'S',21,65,70,75,88);s1.show();}实验结果:2、由学生类、课程类作为基类,共同派生出选课类。

实验8继承与派生讲解

实验8 继承与派生一、实验目的1.理解继承的含义,掌握派生类的定义和实现方法。

2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地使用继承层次中的各种类成员。

3.理解保护成员在继承中的作用,能够在适当的时候使用保护成员以便派生类成员可以访问基类的部分非公开成员。

4.理解虚基类在类的继承层次中的作用,虚基类的引入对程序运行时的影响,能够对使用虚基类的简单程序写出程序结果。

二、知识要点1.继承继承是C++语言的一种重要机制,它允许在已定义的类的基础上产生新类。

从已定义类产生新类的过程称为派生。

已存在的用来派生新类的类为基类,又称父类。

从已存在的类派生出的新类称为派生类,又称为子类。

如,从哺乳动物类派生出狗类,哺乳动物是父类,狗是子类;从汽车类派生出轿车类,汽车是父类,轿车是子类。

在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。

从一个基类派生的继承称为单继承,从多个基类派生的继承称为多继承。

2.派生类的定义格式(1)单继承的定义格式class<派生类名>:<继承方式><基类名>{<派生类新定义成员>};其中:基类名是已经定义类的名称。

派生类名是新定义的一个类的名字,它是从基类中派生的;派生类是按指定继承方式从基类派生的,继承方式常用的有如下3种:public 表示公有继承private 表示私有继承protected 表示保护继承在单继承中,每个类可以有多个派生类,但是每个派生类只能有一个基类,从而形成树形结构。

(2)多继承的定义格式class<派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,……{<派生类新定义成员>};其中继承方式1、继承方式2、……是3种继承方式public、private和protected之一。

多继承与单继承的主要区别从定义格式上看,主要是多继承的基类多于一个。

实验报告-类的派生与继承

d.display();
return 0;
}
4.模拟银行ATM终端系统,ATM机上可以使用储蓄卡和信用卡。储蓄卡有存钱、取钱、查询余额、修改密码等功能。信用卡有存钱、查询额度、查询本期账单金额、查询未出账单总金额、修改密码等功能。请用面向对象方法编程实现上述功能。
#include<iostream>
{
return weight;
}
void setWheels(int ws)
{
wheels = ws;
}
void setWeight(float wt)
{
weight = wt;
}
void display()
{
cout << "车轮数:" << wheels << "汽车承重:" << weight << endl;
cout << "请输入部门:";
cin >> bumen;
}
void display()
{
user::display();
cout << " 职称:" << zhicheng << " 部门:" << bumen << endl;
}
private:
char zhicheng[20];
char bumen[20];
cin >> hour;
sumsalary = salary + 5 * hour;
}
void display()

实验项目2 第2部分 继承与接口

实验项目2 Java面向对象程序设计第2部分继承与接口[实验目的]1、掌握java 继承中父类及其子类的定义方法。

2、掌握子类重写父类同名方法的方法。

3、掌握接口的用法。

[实验要求]1、复习理论教学中所学的内容。

2、认真进行实验预习,查阅参考书,书写源程序,书写实验预习报告。

3、认真总结实验并书写实验报告。

[实验课时] 2学时[实验教学方式] 学生上机实验,教师随堂指导。

[实验内容]1、定义父类People,分别定义People类的子类ChinaPeople,AmericanPeople和BeijingPeople 并分别重写父类中的各个方法。

最后在主方法中分别创建各子类的对象并调用各自的方法打印输出信息。

该程序的模板代码如下:请将其补充完整并调试运行。

class People{protected double weight,height;public void speakHello(){System.out.println("yayawawa");}public void averageHeight(){height=173;System.out.println("average height:"+height);}public void averageWeight(){weight=70;System.out.println("average weight:"+weight);}}class ChinaPeople extends People{【代码1】 //重写public void speakHello()方法,要求输出类似“你好,吃了吗”这样的//汉语信息【代码2】 //重写public void averageHeight()方法,要求输出类似//“中国人的平均身高:168.78厘米”这样的汉语信息【代码3】 //重写public void averageWeight()方法,//要求输出类似“中国人的平均体重:65公斤”这样的汉语信息public void chinaGongfu(){【代码4】//输出中国武术的信息,例如:"坐如钟,站如松,睡如弓"等}}class AmericanPeople extends People{【代码5】 //重写public void speakHello()方法,要求输出类似//“How do you do”这样的英语信息。

实验六-继承与派生

实验六-继承与派生继承与组合一、实验目的1.了解继承在面向对象程序设计中的重要作用。

2.进一步理解继承与派生的概念。

3.掌握通过继承派生出一个新的类的方法。

4.了解虚基类的作用和用法。

5.掌握类的组合二、实验内容1.请先阅读下面的程序,写出程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。

(1)#include <iostream>using namespace std;class A{public:A(){cout<<"A::A() called.\n";}virtual ~A(){cout<<"A::~A() called.\n";}};class B:public A{public:B(int i){ cout<<"B::B() called.\n";buf=new char[i];}virtual ~B(){ delete []buf;cout<<"B::~B() called.\n";}private:char *buf;};void fun(A *a){ cout<<"May you succeed!"<<endl;delete a;}int main(){A *a=new B(15);fun(a);return 0;}1、(1)程序运行结果:A::A() called.B::B() called.May you succeed!B::~B() called.A::~A() called.(2)#include<iostream>using namespace std;class A{public:A(int a,int b):x(a),y(b){ cout<<"A constructor..."<<endl; }void Add(int a,int b){ x+=a;y+=b;}voiddisplay(){ cout<<"("<<x<<","<<y<<")";}~A(){cout<<"destructor A..."<<endl;} private:int x,y;};class B:private A{private:int i,j;A Aobj;public:B(int a,int b,int c,int d):A(a,b),i(c),j(d) ,Aobj(1,1){ cout<<"B constructor..."<<endl;} void Add(int x1,int y1,int x2,int y2){A::Add(x1,y1);i+=x2; j+=y2;}void display(){A::display();Aobj.display();cout<<"("<<i<<","<<j<<")"<<endl;}~B(){cout<<"destructor B..."<<endl;} };int main(){B b(1,2,3,4);b.display();b.Add(1,3,5,7);b.display();return 0;}(2)程序运行结果:A constructor...A constructor...B constructor...(1,2) (1,1) (3,4)(2,5) (1,1) (8,11)destructor B...destructor A...destructor A...(3)#include<iostream>using namespace std;class A{public:A(int a):x(a){ cout<<"A constructor..."<<x<<endl; }int f(){return ++x;}~A(){cout<<"destructor A..."<<endl;} private:int x;};class B:public virtual A{private:int y;A Aobj;public:B(int a,int b,int c):A(a),y(c),Aobj(c){ cout<<"B constructor..."<<y<<endl;}int f(){A::f();Aobj.f();return ++y;}void display(){ cout<<A::f()<<"\t"<<Aobj.f()<<"\t"<<f()<<e ndl; }~B(){cout<<"destructor B..."<<endl;}};class C:public B{public:C(int a,int b,int c):B(a,b,c),A(0){ cout<<"C constructor..."<<endl;}};class D:public C,public virtual A{public:D(int a,int b,int c):C(a,b,c),A(c){ cout<<"D constructor..."<<endl;}~D(){cout<<"destructor D..."<<endl;}};int main(){D d(7,8,9);d.f();d.display();return 0;}(3)程序运行结果:A constructor (9)A constructor (9)B constructor (9)C constructor...D constructor...12 12 11destructor D...destructor B...destructor A...destructor A...(4)#include <iostream>using namespace std;class Base1{public:Base1(){cout<<"class Base1!"<<endl; }};class Base2{public:Base2(){cout<<"class Base2!"<<endl;}};class Level1:public Base2,virtual public Base1 {public:Level1(){cout<<"class Level1!"<<endl;}};class Level2: public Base2,virtual public Base1 {public:Level2(){cout<<"class Level2!"<<endl;}};class TopLevel:public Level1,virtual public Level2{public:TopLevel(){cout<<"class TopLevel!"<<endl;}};int main(){TopLevel obj;return 0;}(4)程序运行结果:class Base1!class Base12class Leve12!class Base2!class Leve11!class TopLeve1!2.某出版系统发行图书和磁带,利用继承设计管理出版物的类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验 2 继承与派生 2.1 实验目的 1.熟练掌握 类的继承 ,能够定义和使用类的继承关系。 2.掌握 派生类 的声明与实现方法。 3.掌握类构造函数的初始化列表与作用域分辨符的使用方法。 4.理解 虚基类 在解决二义性问题中的作用。

2.2 实验工具与准备工作 在开始实验前,应回顾或复习相关内容。 需要一台主算机,其中安装有 Visual C++ 6.0 等集成开发环境软件。

2.3 实验内容 1.先阅读下列程序,写出执行结果。然后输入程序,调试程序,比较结果的正确性。 // 文件名 : main.cpp #include // 预处理命令 using namespace std; // 使用标准命名空间 std

class A { public: // 公有函数 : A(){ cout << " 构造 A" << endl; } // 构造函数 ~A(){ cout << " 析构 A" << endl; } // 析构函数 };

class B: public A { public: // 公有函数 : B(){ cout << " 构造 B" << endl; } // 构造函数 ~B(){ cout << " 析构 B" << endl; } // 析构函数 };

class C: public B { public: // 公有函数 : C(){ cout << " 构造 C" << endl; } // 构造函数 ~C(){ cout << " 析构 C" << endl; } // 析构函数 }; int main(void) // 主函数 main(void) { C obj; // 定义对象

system("PAUSE"); // 调用库函数 system( ) ,输出系统提示信息

return 0; // 返回值 0, 返回操作系统

}

2.先阅读下列程序,写出执行结果。然后输入程序,调试程序,比较结果的正确性。 // 文件名 : main.cpp #include using namespace std;

class A { protected: // 数据成员 : int a;

public: // 公有函数 : A(int x): a(x){ } void Show() const{ cout << a << endl; } };

class B { protected: // 数据成员 : int b;

public: // 公有函数 : B(int x): b(x){ } void Show() const{ cout << b << endl; } };

class C: public A, public B { public: // 公有函数 : C(int x, int y): A(x), B(y){ } void Show() const { cout << a << "," << b << endl; } };

int main(void) { C obj(5, 18); obj.Show(); obj.A::Show(); obj.B::Show();

system("PAUSE"); return 0; }

// 预处理命令 // 使用标准命名空间 std

// 数据成员 // 构造函数 // 显示 a 之值

// 数据成员 // 构造函数 // 显示 a 与 b 之值

// 构造函数 // 显示 b 之值

// 主函数 main(void) // 定义对象 // 显示相关信息 // 显示相关信息 // 显示相关信息

// 调用库函数 system( ) ,输出系统提示信息 // 返回值 0, 返回操作系统 3.程序填空。下面程序主要测试 类构造函数的初始化列表与作用域分辨符 ,请完成程

序。

// 文件名 : main.cpp

#include using namespace std; // 预处理命令 // 使用标准命名空间 std

class A { private: // 数据成员 : int a; // 数据成员

public: // 公有函数 :

A(int x): a(x) { }

void Show() const { cout << "a:" << a << endl; }

// 构造函数

// 显示 a 之值

}; class B: public A { protected: // 数据成员 : int b; // 数据成员

public: // 公有函数 :

B(int x, int y): void Show() const { A(x) , b(y){ } // 构造函数

// 显示相关信息

A::Show(); cout << "b:" << b << endl; //

调用基类

// 显示

A 的成员函数 b 之值 Show()

} };

int main(void) // 主函数 main(void)

{ B obj(5, 18); obj.Show(); //

定义对象

// 显示相关信息

system("PAUSE"); return 0; // 调用库函数 // 返回值 0, system( ) 返回操作系统 ,输出系统提示信息

} 4.改正下面程序中的错误,使其能正常运行。 // 文件名 : main.cpp //1 #include // 预处理命令 //2 using namespace std; // 使用标准命名空间 std //3 //4 // 基类 Base //5 class Base //6 { //7 private: //8 // 数据成员 : //9 int m; // 数据成员 //10 //11 public: //12 // 公有函数 : //13 Base(int a): m(a){ } // 构造函数 //14 Base(const Base ©) {m=copy.m } // 复制构造函数 //15 void Show() const // 显示 m 之值 //16 { cout << "m:" << m << endl; } //17 }; //18 //19 // 派生灰 Derived //20 class Derived: private Base //21 { //22 protected: //23 // 数据成员 : //24 int n; // 数据成员 //25 //26 public: //27 // 公有函数 : //28 Derived(int a, int b): Base(a) ,n(b){ } // 构造函数 //29 void Show() const // 显示相关信息 //30 { //31` Base::Show(); // 调用基类 Base 的成员函数 Show()//32 cout << "n:" << n << endl; // 显示 n 之值 //33 } //34 }; //35 //36 int main(void) // 主函数 main(void) //37 { //38 Derived obj(10, 18); // 定义对象 //39 obj.Show(); // 显示相关信息 //40 //41 system("PAUSE"); // 调用库函数 system( ) ,输出系统提示信息 //42 return 0; // 返回值 0, 返回操作系统

//43 } //44

5.定义 Person (人)类,由 Person 分别派生出 Teacher (教师)类和 Cadre(干部) 类,再由 Teacher(教师)类和 Cadre(干部) 类采用多重继承方式派生出新类 TeacherCadre

(教师兼干部)类,各类之间的继承关系如图 1.1 所示。

Person

Teacher Cadre TeacherCadre 图 2.1 各类之间的继承关系 要求: ( 1)在 Person 类中包含的数据成员有姓名 (name)、年龄 (age) 、性别 (sex) 。在 Teacher 类还包含数据成员职称 (title) ,在 Cadre 类中还包含数据成员职务 (post) ,在 TeacherCadre

相关文档
最新文档