C++程序设计基础实验-实验七 多态性

2023-05-16

实验七多态性

一、实验目的

  1. 掌握运算符重载的方法;
  2. 掌握使用虚函数的继承实现动态多态性。
  3. 掌握纯虚函数及抽象类的使用。

二、实验内容

  1. 设计复数类Complex(请参照教材例题8-1的设计),实现运算符重载。 要求:
    (1)重载运算符“+”和“*”,使之分别能用于复数相加和相乘。(30分)
    (2)重载运算符“<<”,使得复数对象能够使用“<<”运算符输出。(15分)
class Complex{
    public:
        Complex (int,int);                          //构造函数
        Complex (const Complex &c);                 //复制构造函数 
        ~ Complex ();                               //析构函数
        
        Complex operator + (Complex &m);            //重载 + 运算符
        Complex operator * (Complex &m);            //重载 * 运算符
        friend ostream &operator << (ostream &out,
                              const Complex &m);    //重载"<<"运算符 
        int getReal() const {return real;}              //得到复数实部
        int getImag() const {return imag;}              //得到复数虚部
    private:
        int real,imag;                              //复数的实部与虚部
};

int main(void){
    Complex c1(5,4),c3(3,10),c3;                    //定义复数类的对象
     c3 = c1 + c2;
     
     cout << “c3 = “ << c3;
     Complex c4 = c1 * c2 ;
     Cout << “c4 = “ << c4;
    
    return 0;
}
  1. 定义抽象类Geometry;在此基础上派生出类Rectangle和Circle.二者都有计算对象周长函数double getPerim() 计算面积的函数double 两者对象的周长和面积,测试动态多态性。可以在主函数中使用以下语句来测试类(50分)。
int main(){
    Rectangle x1(2,3);
     cout<<"Rectangle:"<<endl;
     fun(&x1);

     Circle y1(5);
     cout<<"Circle:"<<endl;
     fun(&y1);
    
    return 0;
}

##三、实验步骤及结果

  1. 代码:
#include <iostream>
using namespace std;
class Complex{
 	public:
     	Complex (int r=0,int i=0):real(r),imag(i){}                       
     	Complex (const Complex &c);              
     	~ Complex (){}                   
     	Complex operator+(Complex &m); 
     	Complex operator*(Complex &m); 
     	friend ostream &operator << (ostream &out,const Complex &m);
     	int getReal() const {return real;}            
     	int getImag() const {return imag;}            
 	private:
     	int real,imag;                           
};
Complex::Complex(const Complex &c){
 	real=c.real;
	imag=c.imag;
}
Complex Complex::operator+(Complex &m){
 	return Complex(this->real+m.real,this->imag+m.imag);
}
Complex Complex::operator*(Complex &m){
  	return Complex(this->real*m.real,this->imag*m.imag);
}
ostream &operator << (ostream &out,const Complex &m){
  	cout<<"("<<m.real<<","<<m.imag<<")";
}
int main(void){
  	Complex c1(5,4),c2(3,10),c3;
  	c3 = c1 + c2;
  	cout<<"c3 = "<<c3<<endl;
  	Complex c4 = c1 * c2 ;
  	cout<<"c4 = "<<c4<<endl;
  	return 0;
}

运行结果:
在这里插入图片描述

  1. 代码:
#include <iostream>
using namespace std;
class Geometry{
 	public:
     	Geometry(){ 
     	}        
};
class Rectangle:public Geometry{
 	public:
     	Rectangle(double x0,double y0){
         	x=x0;y=y0;
     	}
     	double getPerim(){
         	return 2*(x+y);
     	}	
     	double getArea(){
         	return x*y;
     	}
 	private:
     	double x,y;
};
class Circle:public Geometry{
 	public:
     	Circle(double r0){
         	r=r0;
     	}
     	double getPerim(){
         	return r*3.14*2;
     	}
     	double getArea(){
         	return r*r*3.14;
     	}
 	private:
  		double r;
};
void fun(Circle &p){
 	cout<<"周长是:"<<p.getPerim()<<"\t";
 	cout<<"面积是:"<<p.getArea()<<endl; 
}
void fun(Rectangle &p){
 	cout<<"周长是:"<<p.getPerim()<<"\t";
 	cout<<"面积是:"<<p.getArea()<<endl; 
}
int main(){
 	Rectangle x1(2,3);
 	cout<<"Rectangle:"<<endl;
 	fun(x1);
 	Circle y1(5);
 	cout<<"Circle:"<<endl;
	fun(y1);
	return 0;
}

运行结果:
在这里插入图片描述

四、实验小结(5分)

问题与解决办法:做实验时,忘记了析构函数的书写方式,一个~ 写成了两个~~,通过百度复习了其正确的书写方式。

心得体会:通过本次实验,进一步加深了对运算符重载等知识的学习,同时也复习了前面的构造函数等。

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

C++程序设计基础实验-实验七 多态性 的相关文章

随机推荐

  • Ubuntu与win10 修改开机启动顺序

    lfg 64 lfg ubuntu cd boot grub 打开grub cfg所在文件夹 lfg 64 lfg ubuntu boot grub sudo chmod a 43 w grub cfg 修改权限为所有可写 sudo pas
  • 小觅双目相机标准彩色版SDK的环境配置

    一 初用MYNTEYE双目相机标准彩色版 xff08 SC xff09 1 小觅相机目前标准版有三款 xff0c 详见 xff1a 小觅双目摄像头标准版系列参数比较 2 彩色工程版有以下7种分辨率可选 xff0c 数据输出格式为YUYV x
  • 小觅双目摄像头标准版系列产品参数比较

  • java for无限循环

    for无限循环的几个情况 判断条件为true 会无限循环 省略了判断条件 会无限循环 判断条件为true 会无限循环 package test010 public class Main nbsp nbsp nbsp public stati
  • 计数器与定时器有何区别

    计数器是当你开始从0开始计数时一直不停的开始记数 除非你让他停下来要不他会不停的记下去 而定时器则是不一样的 是需要你自己先设定一个时间然后开始倒计时 当你的所定时间倒计完以后 他就自动停止下来了 懂了吗 至于用哪个就要看你干什么而定了 8
  • C++基础知识

    1 面向对象的程序设计思想是什么 xff1f 答 xff1a 把数据结构和对数据结构进行操作的方法封装形成一个个的对象 2 什么是类 xff1f 答 xff1a 把一些 具有共性的对象归类后形成一个集合 xff0c 也就是所谓的类 3 对象
  • 【开关电源】降压变换器(BUCK)的断续模式建模

    1 前言 在DCDC变换器中BUCK变换器是最基础的一类降压型变换器 xff0c 它可以将输入电压降低后输出 在连续模式CCM下 xff0c 输出和输入之间的比值是D xff08 D为占空比 xff09 这种开关变换器是一种通过电子开关周期
  • 变量命名规范

    本文转载于https blog csdn net ZCF1002797280 article details 51495229 是我见过的描述最精炼 最好懂的命名文档 xff0c 故收藏转载推荐 1 驼峰命名法 1 1 小驼峰法 除第一个单
  • C++实现websocket服务器握手协议(使用Qt)

    前提 xff1a 笔者在开发server程序时 xff0c 要求websocket与server连接 websocket的机制是在第一次连接时进行握手协议 xff0c 协议通过 xff0c 才可以进行正常的通信 xff0c 否则websoc
  • 00011__ARM和STM32的区别

    https blog csdn net qq 34385566 article details 79668280
  • linux中查看系统资源占用情况的命令

    size 61 large top size 主要参数 d xff1a 指定更新的间隔 xff0c 以秒计算 q xff1a 没有任何延迟的更新 如果使用者有超级用户 xff0c 则top命令将会以最高的优先序执行 c xff1a 显示进程
  • 关于PendSV异常和SVC异常

    这里先说什么是异常 xff0c 什么是中断 xff1f 请下这张图 颜色加深的表项为异常 xff0c 这些属于cm3内核自带的 其中 3 xff0c 2 xff0c 1异常的优先级固定 xff0c 是不可更改的 xff0c 其余的异常中断优
  • FreeRTOS学习4-任务创建和删除

    关于任务创建有3个函数 1 动态创建一个任务 可以自动分配任务堆栈和TCB FreeRTOSConfig h中 xff0c 需要定义 define configSUPPORT DYNAMIC ALLOCATION 1 支持动态内存申请 Ba
  • java里 equals和== 区别

    1 java中equals和 61 61 的区别 值类型是存储在内存中的堆栈 xff08 简称栈 xff09 xff0c 而引用类型的变量在栈中仅仅是存储引用类型变量的地址 xff0c 而其本身则存储在堆中 2 61 61 操作比较的是两个
  • VRPTW建模与求解—基于粒子群算法

    VRPTW建模与求解 基于粒子群算法 1 VRPTW简要描述 VRPTW xff08 Vehicle Routing Problem with Time Windows xff09 是指在经典VRP的前提上 xff0c 给每个客户增添时间窗
  • 伽马分布,指数分布,泊松分布的关系 -转自简书

    原文链接 xff1a https www jianshu com p 6ee90ba47b4a 伽马分布 xff0c 指数分布 xff0c 泊松分布的关系 thinkando 关注 2018 09 25 21 13 字数 714 阅读 29
  • 双轴驱动步进电机云台二自由度单片机控制程序PTU57

    高精度云台由两个电机驱动 xff0c 可控制方位角和高度角 xff0c 具有两自由度的机械电子设备 可用于机器视觉 摄影摄像 监控安防 天文观测 雷达扫描 DIY雕刻机 转盘转台 智能机械手臂 双轴跟踪太阳能定日镜等各类应用高精度云台的场合
  • php使用curl获取需要认证的https请求

    lt php php使用curl获取需要认证的https请求的方法 url 61 34 XXXXXX 34 arr header 61 34 Accept application json 34 arr header 61 34 Autho
  • i-vector本质剖析

    1 i vector的由来 基于因子分析理论 xff0c 句子h的超向量可以描述成 其中为ubm模型的均值超向量 xff0c 即为i vector 2 i vector的计算 2 1 T矩阵的估计 为句子h的观察特征 xff0c 可以对应于
  • C++程序设计基础实验-实验七 多态性

    实验七多态性 一 实验目的 掌握运算符重载的方法 xff1b 掌握使用虚函数的继承实现动态多态性 掌握纯虚函数及抽象类的使用 二 实验内容 设计复数类Complex xff08 请参照教材例题8 1的设计 xff09 xff0c 实现运算符