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

友元函数实现复数加减法相关推荐

  1. 第六周项目6.3 友元函数实现复数的加法

    /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:score.cpp *作 者:惠睿 *完成日期:2015年4月10日 ...

  2. 复数运算(友元函数)

    题目描述 复数类的声明如下: 要求如下: 1.实现复数类和友元函数addCom和outCom. 2.   参考addCom函数为复数类增加一个友元函数minusCom,用于实现两个复数的减法 3.在m ...

  3. C++友元函数实现两个复数相加

    #include "string" #include "iostream" using namespace std;class Complex {private ...

  4. 利用友元函数与友元类定义复数类,实现基本运算

    定义复数类Complex,使用友元,完成复数的加法.减法.乘法.除法运算,以及对复 数的输出. 直接上代码: #include "iostream" using namespace ...

  5. C++——运算符的重载---以成员函数方式重载---以友元函数方式重载

    一.运算符的重载 1.运算符的重载 允许把标准运算符(如+ - * /等运算符)应用于自定义数据类型的对象,可以提高程序的可读性,运算符的重载本质上还是函数重载.运算符仅仅是语法上的方便,它是另一种函 ...

  6. 10.2 运算符重载函数作为类成员函数和友元函数

    Complex operator+(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; ...

  7. C++运算符重载(友元函数方式)

    我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数. 当重载友元函数时,将没有隐含的参数this指针.这样,对双目运算符,友元函 ...

  8. c++友元函数及运算符重载

     c++的类和java的类机制着实不大一样,不仅仅是语法,还包括一些特殊的东西,如c++用友元函数来破坏类的封装性,使得外界(友元函数体)可以访问类的私有属性,而java呢,java则可以通过反射机制 ...

  9. C++ 笔记(30)— 友元函数与友元类

    我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...

最新文章

  1. 如何使用Next.js创建动态的Rick and Morty Wiki Web App
  2. python语言属于-python属于哪种语言
  3. SQL优化避免索引失效
  4. 裸辞,迎接2019年的春天
  5. fedora 35 安装各种桌面环境命令整理
  6. 华为 命令 so easy
  7. 如何添加自动更新Play Framework 2.X项目的版本号
  8. 在Java EE应用程序中实现自动重试
  9. 倒数日电脑版_应用日报|iOS 或更名为 iPhoneOS,倒数日 Mac 版上线限时免费
  10. 计算机 识别u盘 原理,电脑与USB3.0之间的识别过程,识别原理,高额金币悬赏!...
  11. Go语言:数组练习—从一个整数数组中获取最大整数,最小整数,总数以及平均值
  12. WolframTones:用一种新科学谱写一种新音乐
  13. JavaSocket编程基础
  14. 人脸识别相机对人脸库进行增删改查——MQTT协议
  15. kafka no record information is available
  16. 【贪玩巴斯】一文学会检索三要素:检索字段、检索词、检索算法检索(二)——「一文学会检索三要素:检索字段、检索词、检索算法」 2021-09-18
  17. C++14新特性:deprecated的含义与使用?
  18. 线程2--主线程(main线程)
  19. iOS app中不能跳转到商店更新
  20. 如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化展示

热门文章

  1. 经典编程题——折纸问题
  2. 准确定位表单中的元素
  3. 双十一就该这么薅羊毛,MacBook、iphone13等万元壕礼等你领
  4. 孩子为什么不能玩抖音精彩回答,共勉
  5. python库源码分析_python第三方库Faker源码解读
  6. openFrameworks实现的简单捕鱼游戏
  7. 段子用计算机等于250,段子手要失业了,计算机也懂幽默
  8. EditText输入完成后自动关闭输入法
  9. windows10下使用minGW64 编译krita源码报错
  10. Git学习总结(二)GitHub账号学生认证