第7讲(继承与派生)

2020-04-15 00:35

第7次上机

实验目的:

1.掌握类的继承的概念和使用方法。

实验内容:

7—5定义一个基类 Shape,在此基础上派生出Rectangle和Circle,二者豆油getArea()函数计算对象的面积,使用Rectangle类创建一个派生类Square 1)Shape类设计:

?根据分析,从Shape类中派生出了Rectangle和Circle,从Rectangle派生出了Square,这三个派生类之间没有共同的属性,所以Shape类可以不设计数据成员,而函数成员为GetArea(),函数体为为空

2)Rectangle类的数据成员有长和宽,函数成员有:构造函数,设置和获取函数,重载Shape类中的GetArea()来求面积

3)Rectangle类的数据成员有半径,函数成员有:构造函数,设置和获取函数,重载Shape类中的GetArea()来求面积

4)Square类从Rectangle类继承,吸收了Rectangle的长和宽,所以可以考虑用构造函数将长和宽设置相等的值,构成边长,而吸收过来的GetArea()函数不需要做修改。

参考答案:

#include class Shape {

public: void GetArea() { } };

//定义矩形类

class Rectangle:public Shape {

private: int lenth; int width; public: Rectangle(int l,int w) { lenth = l;width = w;} double GetArea() { return lenth * width ;} };

//定义圆类

class Circle:public Shape {

private: double radius; public: Circle(double r) { radius = r;}

double GetArea() { return 3.14 * radius * radius;} };

//定义正方形类

class Square:public Rectangle {

public: Square(int a):Rectangle(a,a) { } };

void main(void) {

Rectangle rect(1,2); Circle cr(3); Square sq(4);

cout << \矩形的的面积是:\ cout << \圆的面积是:\

cout << \正方形的面积是:\}

说明:Shape类的作用:主要是为了统一处理,比如:Shape *p ; p ->GetArea()形式,第八章会用到这样的技术。

课后习题7-6 定义一个动物类 Mammal,再由此派生出狗类Dog,定义Dog类的对象,观察基类与派生类的构造函数和析构函数的调用顺序。 //分析:

Mammal的设计:描述一般动物具有的特征,有颜色,体重,年龄等,会发声,有一般的设置函数和获取函数。

Dog的设计:除了具有一般动物的特征,还有尾巴个数,会汪汪叫,会摇尾巴,会咬人,有一般的设置函数和获取函数。

参考答案:

#include #include class Mammal { private:

char m_color[20]; int m_weight;

public: };

void Mammal::SetColor(char color[20]) {

strcpy(m_color,color); }

void Mammal::SetWeight(int weight) { }

char * Mammal::GetColor(){ return m_color;} int Mammal::GetWeight() { return m_weight;} Mammal::Mammal(char color[20],int weight) { }

Mammal::~Mammal()

SetColor(color); SetWeight(weight);

cout << \调用Mammal的构造函数\ m_weight = weight;

void SetColor(char color[20]); void SetWeight(int weight); char *GetColor(); int GetWeight();

Mammal(char color[20],int weight); ~Mammal(); void CanSpeak();

{ }

void Mammal::CanSpeak() { }

class Dog:public Mammal { private:

int m_TailNum;

cout << \动物会发声\

cout << \调用Mammal的析构函数\

public: };

Dog::Dog(char color[20],int weight,int TailNum) :Mammal(color,weight) {

SetTailNum(TailNum);

cout << \调用Dog类的构造函数\}

Dog::~Dog() {

cout << \调用Dog类的析构函数\}

int Dog::GetTailNum(){ return m_TailNum;}

void Dog::SetTailNum(int tailNum) { m_TailNum =tailNum;} void Dog::CanSpeak()

Dog(char color[20],int weight,int TailNum); ~Dog();

void SetTailNum(int tailNum); int GetTailNum(); void CanSpeak(); void CanWagTail(); void CanHurtPeople();

{ }

void Dog::CanWagTail(){ cout << \狗会摇尾巴\void Dog::CanHurtPeople(){cout << \狗会咬人\

void main(void) {

//结果分析:先调用基类的构造函数(先祖先),在调用自己的构造函数(再自己),析构函数的调用顺序和构造函数的调用顺序刚好相反

课后习题7-7 定义一个基类和派生类,在构造函数中输出提示信息,构造派生类的对象,观察构造函数的执行情况: 参考答案:

#include class Base { public: };

class Derived:public Base { public:

Derived() { cout << \调用派生类的构造函数\~Derived() { cout << \调用派生类的析构函数\Base() { cout << \调用基类的构造函数\~Base(){ cout << \调用基类的析构函数\Dog dog(\白色\

cout <<\狗的颜色:\cout << \狗的体重:\cout << \狗的尾巴个数:\dog.CanHurtPeople(); dog.CanSpeak(); dog.CanWagTail();

cout << \狗会汪汪叫\


第7讲(继承与派生).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Hirschmann交换机配置手册 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: