引用
先撰写一个数值类型的基类MyNumeric,要求能够提供这样一些接口:
两个该类对象的减法
两个该类对象的= =比较
两个该类对象的!=比较。
然后实现一个从MyNumeric派生而来的具体的复数(形如a+bi,a称为实部,b称为虚部)类MyComplex。除了实现MyNumeric规定的接口之外,MyComplex还应该实现:
一个缺省构造函数(实部和虚部初始为0)
一个接受两个整型作为其实部和虚部初始值的构造函数
一个支持复数对象和标准整型减法操作(形如Cp - 5,即5和Cp的实部相减虚部不变)
注:一个标准整型和一个复数对象相减的操作不要求(即形如5 - Cp)
基础知识
1.类和继承
class MyComplex : public MyNumeric
2.构造函数
MyComplex();
MyComplex(int i, int j);
3.操作符重载
MyComplex operator-(int n);
bool operator==(MyNumeric& n) const;
bool operator!=(MyNumeric& n) const;
4.接口,也就是纯虚函数
public:
virtual MyNumeric* minus(const MyNumeric& n,MyNumeric* result) const=0;
virtual bool operator==(MyNumeric& n) const=0;
virtual bool operator!=(MyNumeric& n) const =0;
这里面有几个问题要注意:
1)具有纯虚函数的类是抽象类-》抽象类不能被实例化-》无论在传递参数或传递返回值时不能使用值传递的方式,只能传递地址(也就是指针或者引用)
MyNumeric* minus(const MyNumeric& n,MyNumeric* result) //可以
MyNumeric minus(const MyNumeric n,MyNumeric result)//错误,编译不会通过
2)-操作符重载返回值类型,-=操作符返回引用类型
class Integer
{
private:
int i;
public:
Integer(int param):i(param){}
Integer operator-(const Integer& param) const
{
Integer result(this->i-param.i);
return result
}
Integer& operator-=(const Integer& param)
{
this->i -= param.i;
return *this;
}
}
这是因为一般情况下,返回地址类型效率更高一点,所以推荐返回地址类型。
但是operator-要返回的是一个局部变量,局部变量在函数结束后自动销毁,如果返回地址,在调用该函数之后,调用它的代码块将要错误使用一个地址指向已经被销毁的对象。而返回值,系统将会使用copy构造函数复制局部变量至调用代码中的接收对象。局部变量销毁后,不会影响接收对象的生存周期。
3)我们的减操作,因为第1点,不能返回值,因为第2点应该返回值。解决方案是,额外传递一个接收结果的对象的地址入参,以确保函数结束后,接收结果的对象不会被销毁
MyNumeric minus(const MyNumeric& n) const=0;//由于返回的是值,和抽象类冲突,编译失败
MyNumeric* minus(const MyNumeric& n) const=0;//由于返回的是局部变量的地址,执行结果出错。
MyNumeric* minus(const MyNumeric& n,MyNumeric* result) const=0;
5.虚函数重写
虚函数重写,要求子类中的函数和父类的函数,函数名,参数类型,返回类型,完全一样,包括const的声明也必须一致。唯一可以有不同的是返回的类型如果是地址,重写的函数可以返回父函数返回类型的子类型。
MyComplex* minus(const MyNumeric& n,MyNumeric* result) const=0;
6.RTTI实时类型识别
2个函数实现实时类型识别:
typeid 返回对象实际类型
dynamic_cast 将基类型指针或引用安全的转换成派生类的指针或引用
if (typeid(n) != typeid(*this)) throw new exception("必须同类对象相减");
if (typeid(*result) != typeid(*this)) throw new exception("相减结果也放在相同类型中");
const MyComplex & another = dynamic_cast<const MyComplex &>(n);
MyComplex * resultComplex = dynamic_cast<MyComplex *>(result);
分享到:
相关推荐
大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题...
C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....
大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题...
第十四届蓝桥杯EDA赛模拟题一 第十四届蓝桥杯EDA赛模拟题二 第十四届蓝桥杯EDA省赛真题 第十五届蓝桥杯EDA赛模拟试题一(嘉立创EDA提供) 第十五届蓝桥杯EDA赛模拟试题二(嘉立创EDA提供) 4T十五届模拟三
Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法...
JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...
云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备...
自己整理一些大厂的面试题题库,都是一些常见的题目,希望能给大家提供帮助,题库分为3个部分这是第二部分
高频电子线路题库(简答题、计算题)知识点总结 一、高频电子线路基本概念 * 高频电子线路的组成部分:通信系统、调制、解调、信道、接收机等 * 高频电子线路的基本特点:高频率、高速率、高频带宽、高频信号等 ...
高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数1000题.pdf高数...
大模型安全评估测试题+拦截词 生成内容测试题2000道、应拒答500、非拒答500,拦截关键词10000个大模型安全评估测试题+拦截词 生成内容测试题2000道、应拒答500、非拒答500,拦截关键词10000个大模型安全评估测试题+...
最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...
操作题是考试的重点,它分为六大题型:三道基本操作题、两道简单应用题和一道综合应用题。基本操作题通常以填空形式出现,相对简单,主要考察对Python基本语法的理解和运用;简单应用题则涉及一些常用函数的使用,...
1.《计算机图形学》习题.doc(填空题15题,选择题35题,简答及应用题12题,计算题6题,推导题1题,作图题3题); 2.计算机图形学测试题.doc(选择题206题); 3.图形学复习与试题样例.doc(判断题15题,选择填空题30题...
2021张宇题源探析1000题 习题分册-数学一.pdf
本文将围绕CDGA考试的真题、模拟题以及每章节的重点内容进行详尽解析,帮助备考者深入理解并掌握数据治理的关键知识点。 首先,CDGA考试涵盖了数据治理的多个核心领域,包括但不限于数据战略、组织与角色、政策与...
中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 v中兴笔试题 中兴笔试题 ...中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题
电工学习题与答案电工学习题与答案电工学习题与答案电工学习题与答案电工学习题与答案电工学习题与答案电工学习题与答案电工学习题与答案电工学习题与答案电工学习题与答案电工学习题与答案电工学习题与答案电工学习...
面试常见智力题(逻辑分析题及答案) 本资源摘要信息将对面试常见智力题进行详细的分析和解释,涵盖逻辑分析题及答案,旨在帮助读者更好地理解和掌握逻辑分析能力。 一、面试常见智力题 面试常见智力题是指在面试...
二年级口算题大全 二年级口算题大全是一份旨在帮助二年级学生提高口算能力的题库。该题库涵盖了基本的加减乘除运算,涵盖了小学二年级的数学课程大纲要求。 加法口算题: * 62+15=54 * 54-13=41 * 16+13=29 * ......