栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

头歌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.人与复读机

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();
}


2.复读机的毁灭

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;
    
    
}


3.计算图像面积

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";
		}
    
    
};
//圆形类的定义


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947383.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号