头歌C++面向对象 - 类的多态性与虚函数

C++ 面向对象 - 类的多态性与虚函数

一、实训目的
1.掌握虚函数的基本使用。
2.掌握虚析构函数的使用。
3.掌握纯虚函数和抽象类的使用。

二、实训内容
1.人与复读机
设计人类、英语学生类和复读机类三个类。
2.复读机的毁灭
设计三个复读机类并实现一个普通函数。
3.计算图像面积
设计一个矩形类、一个圆形类和一个图形基类,计算并输出相应图形面积。

三、实训所实现系统主要功能

1.人与复读机
人类( Chinese )
它有一个虚函数 greet,函数输出中文问候,即你好。

英语学生类( EnglishLearner )
继承 Chinese 类,重写 greet 函数,访问性为 public,输出英文问候,即Hello。

复读机类( Repeater )
继承 Chinese 类,以 public 访问性重写 greet 函数,函数调用 Chinese 类的 greet 函数。

2.复读机的毁灭
复读机类( Repeater )
它有一个成员函数 Play,在这里它什么也不做。它还有一个析构函数,它被调用时会输出一行 砰!。

正向复读机类( ForRepeater )
继承 Repeater 类并重写 Play 函数,输出没想到你也是一个复读机且在析构函数中输出正·复读机 炸了。
反向复读机类( RevRepeater )
继承 Repeater 类也重写 Play 函数,输出机读复个一是也你到想没且在析构函数中输出机读复·反 炸了。

普通函数:Repeater* CreateRepeater(int type),函数根据 type 的值,动态创建不同的复读机对象,并返回它的指针。其中当type = 0,创建 ForRepeater 对象;type = 1,创建 RevRepeater 对象;其他则返回 0。

3.计算图像面积
图形类( shape )
纯虚函数:void PrintArea(),用于输出当前图形的面积。

矩形类( Rectangle )
继承 Shape 类,并且重写 PrintArea 函数,输出矩形的面积,输出格式为:矩形面积 = width*height。
带参构造函数:Rectangle(float w,float h),这两个参数分别赋值给成员变量的宽、高。

圆形类( Circle )
继承 Shape 类,并且重写 PrintArea 函数,输出圆形的面积,输出格式为:圆形面积 = radio * radio * 3.14。
带参构造函数:Circle(float r),参数 r 代表圆的半径。

四、实训系统核心代码及必要说明
1.人与复读机

/********* Begin *********/
class Chinese
{
	//人类的声明
    public:
		virtual void greet();
    
    
};
//人类的定义
void Chinese:: greet(){
    cout << "你好" << "\n";
}



class EnglishLearner : public Chinese
{
	//英语学生类的声明
    public:
		virtual void greet();
};
//英语学生类的定义

void EnglishLearner :: greet(){
			cout << "Hello" << "\n";
		} 



class Repeater : public Chinese
{
	//复读机类的声明
    public:
        virtual void greet();	
    
};
//复读机类的定义
void Repeater :: greet(){
	Chinese:: greet();
}

/********* End *********/

2.复读机的毁灭

/********* Begin *********/
class Repeater
{
	//复读机基类的声明
    public:
		virtual void Play(){

		}
		virtual ~Repeater(){
			cout << "砰!" << "\n";
		}
};
    
    
//复读机基类的定义


class ForRepeater : public Repeater
{
	//正向复读机的声明
    public:
		virtual void Play(){
			cout << "没想到你也是一个复读机" << "\n";
		}
		virtual ~ForRepeater(){
			cout << "正·复读机 炸了" << "\n";
		}
    
    
};
//正向复读机的定义


class RevRepeater : public Repeater
{
	//反向复读机的声明
    public:
		virtual void Play(){
			cout << "机读复个一是也你到想没" << "\n";
		}
		virtual ~RevRepeater(){
			cout << "机读复·反 炸了" << "\n";
		}
    
    
};

//反向复读机的定义

//普通函数
Repeater* CreateRepeater(int type)
{
    //根据type创建指定的复读机
    Repeater* p;
	if (!type)
		p = new ForRepeater();
	else
		p = new RevRepeater();
	return p;
    
    
}

/********* End *********/

3.计算图像面积

/********* Begin *********/
class Shape
{
	//基类的声明
    public:
		virtual void PrintArea(){}
    
    
};

class Rectangle : public Shape
{
	//矩形类的声明
    private:
		float w, h;
	public:
		Rectangle(float w, float h)
		{
			this -> w = w;
			this -> h = h;
		}
		virtual void PrintArea(){
			cout << "矩形面积 = " << w*h << "\n";
		}
    
    
};
//矩形类的定义




class Circle : public Shape
{
	//圆形类的声明
    private:
		float r;
	public:
		Circle(float r)
		{
			this -> r = r;
		}
		virtual void PrintArea(){
			cout << "圆形面积 = " << 3.14*r*r << "\n";
		}
    
    
};
//圆形类的定义

/********* End *********/
  • 21
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码不会敲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值