c++运算符重载为非成员函数问题

用vc6.0写复数类,使运算符重载为非成员函数,组建时出现fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1794)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information

这要怎么解决,网上的各种办法都试过了还是不行,我还重载了输入>>和输出<<两个符号

1个回答

VC6 过时了,当时有些bug ,
看看SP6补丁打了没有
最好的方法是,不用VC6
另外 实际情况,要贴出代码,才行

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
将重载运算符定义为成员函数还是普通的非成员函数

● 赋值 = 、下标[ ]、调用( )、和成员访问箭头 ->必须是成员函数 ● 符合符合赋值运算符应该是成员,但是并非必须 ● 改变对象状态的运算符或者与给定类型密切相关的运算符,如 递增、递减和解引用运算符应该 是成员 ● 具有对称性的运算符可能转换任一端的运算对象,例如算数、相等性、关系和位运算符等,因此通常应该是普通的非成员函数。举例:

关于C++成员函数和运算符的重载

1.为啥要重载操作符: 通过重载操作符,程序员可以针对“类”类型的操作数定义不同的操作符版本。良好的操作符定义可以使class类型的使用想内置类型一样直观简洁,使用重定义的操作符而不是命名函数使得程序可以用表达式代替函数调用,使程序编写和阅读更容易~ 2.哪些不能重载 ::     .*      .     ?:    这些不能重载 3.需要注意的地方:

C++基础知识复习--运算符重载(非成员函数重载和成员函数重载)

#include&amp;lt;iostream&amp;gt; using namespace std; class Complex { private: float Vector_x; float Vector_y; public: Complex(float x = 0, float y = 0) { Vector_x = x; } float getVector_x() { return Vec...

重载的操作符成员函数与非成员函数

今天看effective STL第26条条款时,发现自己之前没意识到如下的几点(看来自己的c++基础还是渣渣水平o(╯□╰)o)。 如果一个类重载操作符,当在全局域内也重载了同样的操作符,那么在调用该操作符时会面临选择问题。 于是自己test了一下,发现在同等条件下,优先选择类中的操作符重载函数。(想想也挺合理的) 作为类的成员函数这一点在进行重载函数选择时是一个优先的,因此注意某些情况会导

运算符重载函数作为类成员函数与友元函数的区别

运算符重载函数作为类成员函数与友元函数

运算符重载的非成员函数形式

运算符重载为非成员函数的规则:函数的形参代表依自左至右次序排列的各操作数重载为非成员函数时参数个数 = 原操作数个数(后置++、--除外,它们仍然为了区分前置++、--要强行加个int)至少应该有一个自定义类型的参数(例如&quot;Typ1 operator + (int, double)&quot;非法)如果在运算符的重载函数中需要操作某类对象的私有成员,可以将此函数声明为该类的友元运算符重载为非成员函数的使用方...

为什么有的操作符重载函数只能是成员函数?

出自于c++ primer 5e的一句话: 赋值(=)、下标([])、调用(())和成员访问箭头(->)运算符必须是成员(函数)。   为什么?对于赋值运算符来说,我们知道一个c++类,程序员如果没有为其定义了赋值操作符重载函数,编译器也会隐式的定义,这样倘若再定义全局赋值运算符重载函数,将会发生二义性。即使编译器允许这样的定义手法,在调用的时候也编译不过:cls& operator=(cls&

C++运算符重载(成员函数方式)

一、运算符重载 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。如果将C++中这些现存的运算符直接作用于用户自定义的类型数据上,会得到什么样的结果呢?编译器无法给出正常的结果,因为我们需要运算符重载,给运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为,增强了运算符的普适性。 运算符重载的实质是函数重载。

运算符重载为成员函数

运算符重载实质上就是通过函数重载,重载为成员函数,它就可以自由的访问本类的数据成员,实际使用时,总是通过该类的某个对象来访问重载的运算符。如果是双目运算符,左操作数是对象本身的数据,由this指针指出,就不再需要任何参数。下面分别介绍这两种情况。 对于双目运算符B,如果要重载为类的成员函数,使之能够实现表达式oprd1 B oprd2,其中oprd1为A类的对象,则应当把B重载为A

C++非成员函数、友元函数、重载运算符

#ifndef MYCLASS_H #define MYCLASS_H #include &amp;lt;iostream&amp;gt; using namespace std; class MyClass { friend bool operator==(int b, MyClass my); //友元函数重载运算符 friend void sayHello(MyClass my); /...

C++运算符重载函数作为类成员函数和友元函数

例10.2中对运算符“+”进行了重载,使之能用于两个复数的相加。在该例中运算符重载函数operator+作为Complex类中的成员函数。 可能有的读者会提出这样的问题:”+“是双目运算符,为什么在例10.2程序中的重载函数中只有一个参数呢?实际上,运算符重载函数有两个参数,由于重载函数是Complex类中的成员函数,有一个参数是隐含的,运算符函数是用this指针隐式地访问类对象的成员。可以

运算符重载 定义为类成员函数or非成员函数

1. 运算符重载定义为类成员函数 2. 运算符重载定义为非成员函数

C++细节 输出运算符的重载为什么不写成类的成员函数

 打印类中的一些变量,此时就需要使用函数或者重载,为了提高代码可读性,一般使用操作符重载来书写,而cout并不在c++的默认类成员函数中,需要我们自己书写。第一种写在类中如下面的代码(我们以日期类举例,较《c++primer》中的书店类更加容易讲解做笔记) 对输出运算符的重载 void operator&amp;lt;&amp;lt;(ostream&amp;amp; out) { out &amp;lt;&amp;l...

【C++】成员函数重载二元和一元运算符

重载双目运算符时,运算符函数中应该具有两个参数,若运算符函数作为类的成员函数(当运算符重载函数作为类的成员函数时,要求操作数左边必须是一个对象,而函数的参数可以是同类的对象也可以是普通的变量),则只需要一个参数。 双目运算符双目运算符就是具有两个操作数的运算符。如 +、-、==等。对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中含有两个参数。 成

求助,C++中为什么有些函数只能用成员函数重载,而有些函数则只能用友元函数重载,其本质原因是什么?

操作符重载函数,仍然是一个成员函数。和普通的成员函数调用一样。我们知道,类的成员函数必须通过对象才可以调用,比如“[ ]” 运算符。 class test{public: int operator[](int pos);}; 要调用 [] 运算符重载成员函数,必须有一个test的对象,否则无法调用。所以它必须是成员函数。有一些运算符即可以友元,也可以用成员函数,比如 "+"。class te

C++ 重载运算符 运算符重载函数作为类成员函数 重载运算符+

用运算符重载函数作为类成员函数的方法重载运算符+ 下面的例子来自于课本: #include using namespace std; class Complex { public: Complex() //无参构造函数 { real = 0; imag = 0; } Co

c++中运算符重载为类成员函数

运算符重载是对已有的运算符赋予多重含义,在C++中预定义的运算符其运算对象是基本数据类型,而不适用于用户自定义类型(例如类),可以重载大多数c++已有的运算符(. :: ?: .*除外),但是运算符的重载不改变其优先级和结合性以及操作数的个数。     运算符重载的生命形式:                                          函数类型   operator 运算

Effective C++ (E3 24)笔记之使用非成员函数重载多元运算符,以支持所有参数被隐式转换

建立数值类型时,令class支持隐式类型转换是合理的。如果想通过运算符重载来世类对象支持算术运算,那么该选择成员函数、非成员函数还有友元函数? 假设此类描述有理数: class rational { public: rational(int num=0, int deno=1) :m_num(num),m_deno(deno){} int retnum() const{ ret

常量对象、常量成员函数、常量成员函数的非常量重载版本。

奇妙却非比寻常的const

成员函数和友元函数 完成二元和一元运算符重载(进阶1)

二元运算符重载: 全局函数: #include using namespace std; class Complex{//复数类 private: int a; int b; friend Complex operator + (Complex &, Complex &);//注意声明友元函数 public: Complex(int a = 0, int

运算符重载函数之const

Const运算符重载函数 每个类都需要重载自己的运算符,这样该类的对象才能使用相应的运算符。对于运算符重载函数来说,参数个数就是该运算符接受的运算对象的个数,这个大家都是知道的。 对于const修饰运算符重载函数这是至关重要的, object operator + (const object &amp;amp;amp;) const ; 修饰函数的这个const其实修饰的是this指针。this指针从,obj...

双目运算符的重载

源代码: #include #include using namespace std; class String { public: String(); String(char *str); void String_display(); friend bool operator<(String &string1,String &string2); friend bool o

【c/c++】类型转换函数(类型转换运算符重载函数)

用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。 C++提供类型转换函数(type conversion function)来解决这个问题。类型转换函数的作用是将一个类的对象转换成另一类型的数据。如果已声明了一个Complex类,可以在Complex类中这样定义类型转换函数

c++操作符重载 类成员函数 类友员函数 左值 右值

一.操作符重载的含义与定义方式 C++已有的操作符只适合处理C++的基本数据类型。重写操作符函数一般定义成类的成员函数或友元函数。 二.操作符重载原则: 1.不能改变运算符的初始意义。2.不能改变运算符的参数数目。如重载运算符+时只用一个操作数是错误的。3.运算符函数不能包括缺省的参数。4.绝大部分C++运算符都可以重载,除以下的例外:      .   ::   .*   ?5.除

流运算符为什么不能重载为成员函数,只能用友元函数重载

一、 为什么operator 如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。。。。 而 >>  或 如果一定要声明为成员函数,只能成为如下的形式: ostream & operator {   return output; } 所以在运用这个 不合符人的习惯。   二、 cout //用重

C++中Operator类型强制转换成员函数

类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数。它的定义格式如下:    class     {      public:       operator ();

C++ 运算符重载(1)

一      运算符重载概述   二    重载运算符的实现 1 作为成员函数重载运算符 A 双目运算符重载 B 单目运算符重载 2 作为全局(友元)函数重载运算符 A   双目运算符重载 B 单目运算符重载 三、重载的规则和原则: ---------------------------------------------------------------------

运算符重载,什么时候用友元?

重载ostream和istream运算符的时候,必须重载为友元,这是为什么?// over load input and output operators >friend ostream& operator<<(ostream &output, MyString &str);friend istream& operator>>(istream &input, MyString

C++实现输入输出运算符重载、友元函数和成员函数实现复数类Complex

题目要求如下: 1) 基本的构造函数; 2) 成员运算符+、-实现复数的加减运算; 3) 友元运算符+、-实现更合理的加减运算; 4) 运算符<<和>>实现复数类的输出输入。

C++重载运算符及const成员函数简述

ACM中,用重载函数会使解题更加方便,但是又需要像c++那样深入理解,遂简单总结了结构体中的重载运算符及const成员函数一些简单的用法. 闲言少叙,直接看代码: /** * 行有余力,则来刷题! * 博客链接:http://blog.csdn.net/hurmishine * */ #include #include #include using namespace std

C++运算符重载、友元函数重载

实验要求: 1、设计一个类,用自己的成员函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。要求: (1)输出结果是最简分数(可以是带分数); (2)分母为1,只输出分子。#include<iostream> using namespace std; class score{ public: score(int X=0,int Y=0){ x=X;

c++中类的默认四个成员函数介绍(构造函数+拷贝构造+析构函数+赋值运算符重载函数)

在C++中,类的6个默认的成员函数包括:构造函数、析构函数、拷贝构造函数、赋值运算符重载函数、取地址操作符重载、const修饰的取地址操作符重载。本文将主要介绍前四个成员函数:一、构造函数在c++程序中,对象的初始化时一个不可缺少且十分重要的问题,因此c++在类的设计中提供了构造函数。 构造函数,顾名思义,为对象分配空间,进行初始化,它是一种特殊的成员函数,具有以下特点: 1.函数名与类名相同。

C++复数运算的运算符重载

C++提供了运算符重载,极大地方便了自定义类型之间的运算, 本文就最简单的复数运算实现让初学者体会运算符重载的作用以及运算符重载的原理。

C++ 运算符重载讲解与经典实例

C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如:  class complex  {   public:    complex(double r=0.0,double I=0.0){real=r;imag=I;}    void display();   private:    double real;    dou

C++用全局函数重载运算符

运算符重载函数既可以声明为类的成员函数,也可以声明为所有类之外的全局函数。 将运算符重载函数声明为全局函数时,二元操作符需要两个参数,一元操作符需要一个参数,而其中必须有一个参数是对象,好让编译器区分这是程序员自定义的运算符。 以下例子是用全局运算符重载计算复数的和: #include using namespace std; class complex{ private: doubl

C++-使用类(作为成员函数还是非成员函数)

使用类 (3) 重载运算符: 作为成员函数还是非成员函数 对于很多运算符来说,可以选择使用成员函数或非成员函数来实现运算符重载。 一般来说,非成员函数应是友元函数,这样它才能直接访问类的私有数据。 例如,Time类的加法运算符在Time类声明中的原型如下: Timeoperator+(constTime &amp;amp; t) const;    //成员函数版本 这个类也可以使用下面的原型: ...

重载前置,后置(自增运算符 ++ 和自减运算符 --)

如何重载增量运算符 ++ 和 -- 运算符++和--有前置和后置两种形式,如果不区分前置和后置,则使用operator++( )或operator--( )即可;否则,要使用operator++( )或operator--( )来重载前置运算符,使用operator++(int)或operator--(int)来重载后置运算符,调用时,参数int被传递给值0。 对于“++”

运算符重载友元函数实例

一个实例,实现运算符重载(成员函数和非成员函数两种方式),友元函数的使用,注意事项等

c++知识点----成员函数重载运算符

题目: 编写一个程序,用成员函数重载运算符“+”和“-”将两个二维数组相加和减,要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入 用到的文件 maincpp.cpp #define M 2 #include using namespace std; #include "class.h" int main() { cout << "请输入4个数组成

C++中const成员函数和非const成员函数的重载

函数重载 函数重载的定义是:在相同的作用域中,如果函数具有相同名字而仅仅是形参表不同,此时成为函数重载。注意函数重载不能基于不同的返回值类型进行重载。 注意函数重载中的“形参表”不同,是指本质不同,不要被一些表象迷惑。main函数不能被重载。 下面三组定义本质是相同的,不是重载: 1)int sum (int &a); 和 int sum (int &); 2)  int sum (in

c++成员运算符重载和友元运算符重载的比较(以++,--运算符为例)

1、对双目运算符而言,成员运算符重载函数参数列表中含有一个参数,而友元运算符重载函数参数列表含有两个参数;对单目运算符而言,成员运算符重载函数参数列表中没有参数,而友元运算符重载函数参数列表含有一个参数。 2、双目运算符一班可以被重载为友元运算符和成员函数运算符,但是当一个整数与一个复数相加时,必须使用友元函数。 例:友元运算符重载函数实现一个复数与一个整数相加#include<iostream

运算符函数重载

1.运算符的本质是什么?把运算符看作函数名,通过函数重载的方式为同一个运算符实现不同规则的运算,故运算符重载的本质就是函数重载。2. 怎样进行运算符重载?运算符重载的函数名是由关键字operate和其后重要的运算符符号构成。运算符函数定义的一般格式如下:数据类型 operate &amp;lt;运算符符号&amp;gt;(&amp;lt;参数列表&amp;gt;){&amp;lt;函数体&amp;gt;} 3、哪些运算符可以重载?“+”,“-”...

运算符重载编程题1(C++程序设计第4周)

问题描述下面程序的输出是:3+4i5+6i请补足Complex类的成员函数。不能加成员变量。#include <iostream> #include <cstring> #include <cstdlib> using namespace std; class Complex { private: double r,i; public: void Print() {

C++面向对象程序设计教程 第4章 运算符重载

4.1 运算符重载的概念 4.2 运算符重载方式 4.2.1 运算符重载为类的成员函数

重载运算符与友元函数

本次博客 主要学习运算符重载和友元函数。其中 运算符重载能够将平时用于内置类型的变量的操作符(如+,-,*,/等)用于类对象; 友元这种C++机制使得非成员函数可以访问私有数据。

运算符重载,何时用友元,何时用成员函数

1.能用成员函数,尽量使用成员函数。因为,友元函数,可以访问类内的所有数据,破坏了类的封装。 2.当所重载的运算符的函数的参数中,含有该类不能访问的数据时,用友元函数。因为,友元函数时全局函数,它不在某一类中,可以访问类之外的数据。

C++中operator<<运算符重载注意事项

我们在定义一个类的时候,为了使用方便,希望通过<<打印类的相关信息,需要重载<<运算符一般运算符重载都设计为类的member function,但是operator<<却不能这样设计,Essential C++中解释如下: 为什么不把output运算符设计为一个member function呢?因为作为一个member function,其左侧操作数必须是隶属同一个class之下的对象,如果ou

C++参考——成员函数、友元函数和一般函数有区别

返回:贺老师课程教学链接【项目4-成员函数、友元函数和一般函数有区别】(1)阅读下面的程序,体会注释中的说明。//例:使用成员函数、友元函数和一般函数的区别 #include using namespace std; class Time { public: Time(int h,int m,int s):hour(h),minute(m),sec(s) {} void disp

C++之双目运算符重载

运算符重载可以友元重载,也可以成员函数重载,但两者是不能共存的。因为这会造成二义性,再一次强调,计算机最讨厌的就是让他做选择。同时有的运算符只支持友元重载,有的则只能成员函数重载,在后面的详细说明中,再区分,先举个例子:一、友元重载:class Complex{ private: float _x; float _y; public: Complex(float x = 0,

重载双目运算符和重载单目运算符

new 和delete是单目运算符。 strcpy的用法: 函数原型:char  *strcpy(char * est.const char *src) 功能是从src地址开始且含有null结束符的字符串复制到以dest地址开始的字符串中,并返回指向dest的指针。dest的内存长度要大于src的内存长度,否则会产生溢出。 因此两个字符串在相互赋值的时候如下: char *p; cha

相关热词 c# 解析cad c#数字格式化万 c#int转byte c#格式化日期 c# wpf 表格 c# 实现ad域验证登录 c#心跳包机制 c#使用fmod.dll c#dll vb 调用 c# outlook
立即提问
相关内容推荐