友元函数实现复数加减法
C++程序:友元函数重载复数减法在dev-C++ 5.11下运行没有问题,但是在vc6.0运行时提示错误。
(自考C++程序设计2019年版,程序4-1,例4-2、程序4-2等有同样问题)
程序代码如下:
#程序4-1
#include <iostream>
using namespace std;
class myComplex //复数类
{private:double real,imag;
public:myComplex(double r=0,double i=0){ real=r; imag=i;} //构造函数void outCom(){ cout<<"("<<real<<","<<imag<<")";} //成员函数 myComplex operator-(const myComplex &c); //成员函数friend myComplex operator+(const myComplex &c1,const myComplex &c2);//友元 };
myComplex myComplex::operator-(const myComplex &c)
{ return myComplex(this->real-c.real,this->imag-c.imag);} //返回一个临时对象
myComplex operator+(const myComplex &c1,const myComplex &c2)
{ return myComplex(c1.real+c2.real,c1.imag+c2.imag); } //返回一个临时对象
int main()
{myComplex c1(1,2),c2(3,4),res;c1.outCom(); cout<<"operator+"; c2.outCom(); cout<<"=";res=c1+c2; res.outCom(); cout<<endl;c1.outCom(); cout<<"operator-"; c2.outCom(); cout<<"=";res=c1-c2; res.outCom(); cout<<endl;return 0;
}
在dev-C++ 5.11下运行没有问题,但是在vc6.0运行时提示错误:
Compiling…
pro4-1.cpp
d:\ftp\cpp\pro4-1.cpp(11) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file ‘msc1.cpp’, line 1786)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
Error executing cl.exe.
pro4-1.obj - 1 error(s), 0 warning(s)
百度了一下,一种解释为:
有些C++编译系统(例如Visual C++ 6.0)没有完全实现C++标准,它所提供的不带后缀.h的头文件不支持把运算符重载作为友元函数,所以编写运算符重载作为友元函数时,在Visual C++系统中编译时会出错,这里提供两种解决方案:
(1) 由于Visual C++所提供的老版本的带后缀.h的头文件可以支持此项功能,因此可以将程序头两行改一下。原来的程序为:
#include <iostream>
using namespace std;
改为:
#include <iostream.h>
经验证:可行。
后面在程序4-2中,用到string类对象s,无法使用,只好改为char *s。
<string.h>是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。
< cstring>实现同<string.h>相同或兼容。
< string>定义了一个string的字符串类,还加了#include<string.h>包含了C版本的字符串操作。
(2)在复数类前增加
class myComplex;
myComplex operator+(const myComplex &c1,const myComplex &c2);
也可运行。
后面在程序4-2中,也在复数类前加上类的声明和6个友元函数的声明,可以运行。
参考:https://blog.csdn.net/weixin_34417814/article/details/92631106
友元函数实现复数加减法相关推荐
- 第六周项目6.3 友元函数实现复数的加法
/* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:score.cpp *作 者:惠睿 *完成日期:2015年4月10日 ...
- 复数运算(友元函数)
题目描述 复数类的声明如下: 要求如下: 1.实现复数类和友元函数addCom和outCom. 2. 参考addCom函数为复数类增加一个友元函数minusCom,用于实现两个复数的减法 3.在m ...
- C++友元函数实现两个复数相加
#include "string" #include "iostream" using namespace std;class Complex {private ...
- 利用友元函数与友元类定义复数类,实现基本运算
定义复数类Complex,使用友元,完成复数的加法.减法.乘法.除法运算,以及对复 数的输出. 直接上代码: #include "iostream" using namespace ...
- C++——运算符的重载---以成员函数方式重载---以友元函数方式重载
一.运算符的重载 1.运算符的重载 允许把标准运算符(如+ - * /等运算符)应用于自定义数据类型的对象,可以提高程序的可读性,运算符的重载本质上还是函数重载.运算符仅仅是语法上的方便,它是另一种函 ...
- 10.2 运算符重载函数作为类成员函数和友元函数
Complex operator+(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; ...
- C++运算符重载(友元函数方式)
我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数. 当重载友元函数时,将没有隐含的参数this指针.这样,对双目运算符,友元函 ...
- c++友元函数及运算符重载
c++的类和java的类机制着实不大一样,不仅仅是语法,还包括一些特殊的东西,如c++用友元函数来破坏类的封装性,使得外界(友元函数体)可以访问类的私有属性,而java呢,java则可以通过反射机制 ...
- C++ 笔记(30)— 友元函数与友元类
我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...
最新文章
- 如何使用Next.js创建动态的Rick and Morty Wiki Web App
- python语言属于-python属于哪种语言
- SQL优化避免索引失效
- 裸辞,迎接2019年的春天
- fedora 35 安装各种桌面环境命令整理
- 华为 命令 so easy
- 如何添加自动更新Play Framework 2.X项目的版本号
- 在Java EE应用程序中实现自动重试
- 倒数日电脑版_应用日报|iOS 或更名为 iPhoneOS,倒数日 Mac 版上线限时免费
- 计算机 识别u盘 原理,电脑与USB3.0之间的识别过程,识别原理,高额金币悬赏!...
- Go语言:数组练习—从一个整数数组中获取最大整数,最小整数,总数以及平均值
- WolframTones:用一种新科学谱写一种新音乐
- JavaSocket编程基础
- 人脸识别相机对人脸库进行增删改查——MQTT协议
- kafka no record information is available
- 【贪玩巴斯】一文学会检索三要素:检索字段、检索词、检索算法检索(二)——「一文学会检索三要素:检索字段、检索词、检索算法」 2021-09-18
- C++14新特性:deprecated的含义与使用?
- 线程2--主线程(main线程)
- iOS app中不能跳转到商店更新
- 如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化展示