【Educoder作业】C++ 面向对象 - 类的多态性与虚函数

2023-11-16

【Educoder作业】C++ 面向对象 - 类的多态性与虚函数

这个就是知道 v i r t u a l virtual virtual就会了。

T1 人与复读机

有了虚函数就可以实现派生类的多态性了。

#include <iostream>
using namespace std;

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




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

void EnglishLearner :: greet() {
	puts("Hello");
}




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

void Repeater :: greet() {
	Chinese :: greet();
}


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

T2 复读机的毁灭

重写的时候,我们可以加一个 o v d e r r i d e ovderride ovderride告诉计算机我们要重写这个类的这个函数了。

#include <iostream>
using namespace std;

/********* Begin *********/
class Repeater
{
	//复读机基类的声明
    public :
	virtual void Play() {}
	virtual ~Repeater() {
		puts("砰!");
	}
    
    
};
//复读机基类的定义




class ForRepeater : public Repeater
{
	//正向复读机的声明
    public :
	void Play() override;
	~ForRepeater() {
		puts("正·复读机 炸了");
	}
    
    
};
//正向复读机的定义

void ForRepeater :: Play() {
	puts("没想到你也是一个复读机");
}


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




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

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

T3 计算图像面积

如果这个派生类的多态性的实现,并没有继承的含义在里面。也就是多态之间没什么交集,只不过有一个这样的基类而已。我们就整一个抽象类就行了,不需要实现具体的虚函数。

#include <iostream>
using namespace std;

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

class Rectangle : public Shape
{
	//矩形类的声明
    public :
	void PrintArea();
	Rectangle(float w, float h) {width = w, height = h;}
	float width, height;
    
    
};
//矩形类的定义
void Rectangle :: PrintArea() {
	cout << "矩形面积 = " << width * height << endl ;
}

class Circle : public Shape
{
	//圆形类的声明
    public :
	void PrintArea();
	Circle(float r) {radio = r;}
	float radio;
    
    
};
//圆形类的定义


void Circle :: PrintArea() {
	cout << "圆形面积 = " << radio * radio * 3.14 << endl ;
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Educoder作业】C++ 面向对象 - 类的多态性与虚函数 的相关文章

  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • 在路由mvc 4中添加公司名称

    我一直在尝试为 Facebook 等用户提供在 URL 中添加公司名称的选项 http localhost 50753 MyCompany Login 我尝试过不同的网址 但没有成功 routes MapRoute name Default
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • .NET 4 的条件编译[重复]

    这个问题在这里已经有答案了 可能的重复 条件编译和框架目标 https stackoverflow com questions 2923210 c sharp conditional compilation and framework ta
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall

随机推荐