C++实验6_1多态性与虚函数(1)

一、实验目的和要求

 1.掌握静态联编和动态联编的概念;

2.掌握成员函数方式运算符重载;

3.掌握友元函数方式运算符重载;

4.理解掌握++、--、=运算符的重载。

二、实验环境(软、硬件及条件)

一台安装有Visual C++ 6.0的计算机

三、实验步骤

1、阅读下面的程序,回答程序后面的问题。

#include "iostream.h"

 

class CComplex

{

public:

CComplex()

{

real = 0;

imag = 0;

}

CComplex(int x,int y)

{

real = x;

imag = y;

}

 

int real;

int imag;

 

CComplex operator + (CComplex obj1)  //-------------------------------

{

CComplex obj2(real + obj1.real, imag + obj1.imag);

return obj2;

}

};

 

void main()

{

CComplex obj1(100,30);

CComplex obj2(20, 30);

CComplex obj;

obj = obj1+obj2;    //---------------------------------------------------

cout << obj.real <<endl;

cout << obj.imag << endl;

}

 

问题1:写出程序的运行结果

问题2:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型?

问题3:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?

 

 

2、阅读下面的程序,找出其中的错误并改正。

 

#include "iostream.h"

 

class CComplex

{

public:

CComplex()

{

real = 0.0;

imag = 0.0;

}

CComplex(double x, double y)

{

real = x;

imag = y;

}

CComplex operator + (CComplex &obj1)

{

CComplex obj3(real + obj1.real, imag + obj1.imag);

return obj3;

}

CComplex &operator++(CComplex &obj)

{

obj.real += 1;

obj.imag +=1;

return obj;

}

void print()

{

cout<<real<<"+"<<imag<<"i"<<endl;

}

private:

double real;

double imag;

};

 

void main()

{

CComplex obj1(2.1,3.2);

CComplex obj2(1.3,2.5);

cout<<"obj1=";

obj1.print();

cout<<"obj2=";

obj2.print();

CComplex obj3 = obj1 + obj2;

cout<<"befor++, obj3=";

obj3.print();

++obj3;

cout<<"after++, obj3=";

obj3.print();

}

四、实验中遇到的问题及解决

五、实验结果及分析

1.

问题1.运行结果:

120

60

问题2.

因为①处所运用达到是CComplex类的重载+运算符,两个CComplex相加后结果仍为CComplex.

问题3.

因为重载+运算符在程序中相当于成员函数,第一个参数由this指针隐含调用,所以只设置第二个参数。

2.

#include <iostream>

using namespace std;

class CComplex

{

public:

 

CComplex()

{

real = 0.0;

imag = 0.0;

}

CComplex(double x, double y)

{

real = x;

imag = y;

}

CComplex operator + (CComplex &obj1)

{

CComplex obj3(real + obj1.real, imag + obj1.imag);

return obj3;

}

CComplex & CComplex::operator++()

{

real += 1;

imag +=1;

return *this;

}

void print()

{

cout<<real<<"+"<<imag<<"i"<<endl;

}

private:

double real;

double imag;

};

 

void main()

{

CComplex obj1(2.1,3.2);

CComplex obj2(1.3,2.5);

cout<<"obj1=";

obj1.print();

cout<<"obj2=";

obj2.print();

CComplex obj3 = obj1 + obj2;

cout<<"befor++, obj3=";

obj3.print();

++obj3;

cout<<"after++, obj3=";

obj3.print();

}

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是面向对象编程中的一个重要概念,它允许不同的对象对同一个消息做出不同的响应。在C++中,通过函数实现多。在引用中的第一个程序中,定义了一个基类ONE和两个派生类TWO和THREE。基类ONE中定义了一个函数f(),派生类TWO和THREE都对该函数进行了重写。在main函数中,通过指针p调用了基类ONE和派生类THREE中的f()函数。由于f()函数函数,在运行时会根据指针的实际类型来确定调用哪个版本的f()函数。因此,在p指向派生类THREE的对象时,调用的是派生类THREE中的f()函数。这就是多的体现。中的程序二中,定义了一个基类Base和一个派生类SubClass。基类Base中定义了一个函数fn(),派生类SubClass对该函数进行了重写。在main函数中,通过指针p分别调用了基类Base和派生类SubClass中的fn()函数。同样地,由于fn()函数函数,在运行时会根据指针的实际类型来确定调用哪个版本的fn()函数。因此,当p指向派生类SubClass的对象时,调用的是派生类SubClass中的fn()函数。这也是多的一种表现形式。中的程序中,定义了一个类A和一个派生类B。类A中有两个私有的整型变量a和b,并定义了构造函数进行初始化,以及成员函数geta()和getb()来获取a和b的值。派生类B从类A继承并覆盖了geta()函数,使其返回a的两倍。在main函数中,声明了一个类B的对象,并调用了该对象中的geta()函数,将结果输出。这里也涉及到了多,因为通过指针p调用的是派生类B中的geta()函数,而不是基类A中的geta()函数123 #### 引用[.reference_title] - *1* *2* *3* [C++实验8报告多函数](https://blog.csdn.net/qq_44621510/article/details/90724548)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值