c++的运算符重载冲突问题

问题描述

c++的运算符重载冲突问题

在一个类中,重载了运算符“+”和“=”;
"+" 运算符返回值是这个类的对象;
当表达式 C = A + B;是否冲突了?
谢谢。

解决方案

A+B 如果不是返回引用的话那么是个临时对象,再将一个对象 调用重载的 = ,我觉得不好冲突啊。
你写的程序冲突了吗?

解决方案二:

注意是不是deep的拷贝了,如果不是deep的拷贝的话,指针类的,&类的,和new有关的时候,可能会delete多次
关键是一个temp的对象离开了语句,就自己销毁了,然后你没有深拷贝就是指向了一个被delete过得区域

时间: 2024-10-07 05:24:59

c++的运算符重载冲突问题的相关文章

c++运算符重载冲突问题

问题描述 c++运算符重载冲突问题 在头文件中加入#include < memory >以后,很多运算符都提示错误了,比如cin>>n;里的>>这种. 去掉头memory头文件就都好了.怎么避免这个冲突? 解决方案 可能是编译器不支持memory吧,你用memory是要用来分配内存麽. 解决方案二: 我怎么没有遇到这种问题,你得把问题再描述清楚一点 解决方案三: 额,for循环里不应该用的是;分隔么? 要不试试 #include 解决方案四: 使用命名空间,指定定义域就

C++学习摘要之七:运算符重载

C++语言中预定义的运算符的操作对象只能是基本数据类型,但是,在实际应用中,对于很多用户自定 义数据类型(如类)也需要类似的功能,这就需要对已有的运算符赋予多种含义,使同一个运算符具有作 用于不同类性的数据导致不同类型的行为,这就是运算符重载.因此,运算符重载的目的是设置C++语言 中的某一运算符,让它们之间并不冲突,C++语言会根据运算符的位置辨别应使用哪一种功能进行运算. 可见,运算符重载的优点是允许改变使用于系统内部的运算符的操作方式,以适应用户新定义类型的类似 运算. 运算符重载的实质是

c++-C++ list赋值和类的运算符重载

问题描述 C++ list赋值和类的运算符重载 刚刚发现了个问题,一直卡着我 class CA { public: CA(){} ~CA(){} public: VOID operator = ( CA& msg ) { dwvalue = msg.dwvalue; } private: DWORD dwvalue; }; VOID Fuck1( OUT list& bb ) { list< CA > aa; CA a; CA b; aa.push_back(a); aa.pu

C++运算符重载赋值运算符

自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数. 赋值运算符重载函数的定义与其它运算符重载函数的定义是差不多的. 下面我们以实例说明如何使用它,代码如下: //程序作者:管宁//站点:www.cndev-lab.com//所有稿件均有版权,如要转载,请务必著名出处和作者#include <iostr

C++运算符重载转换运算符

为什么需要转换运算符? 大家知道对于内置类型的数据我们可以通过强制转换符的使用来转换数据,例如(int)2.1f;自定义类也是类型,那么自定义类的对象在很多情况下也需要支持此操作,C++提供了转换运算符重载函数,它使得自定义类对象的强转换成为可能. 转换运算符的生命方式比较特别,方法如下: operator 类名(); 转换运算符的重载函数是没有返回类型的,它和类的构造函数,析构函数一样是不遵循函数有返回类型的规定的,他们都没有返回值. 下面我看一个例子,看看它是如何工作的: //例1 //程序

C++运算符重载函数基础及其值返回状态

运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运算符让他们参与计算,但是对于自定义类的对象来说,我们是无论如何也不能阻止写出像下面的代码一样的程序来的. 例子如下: class Test{ //过程省略}int main(){ Test a,c; c=a+a;} 当然这样的代码是不能够通过编译的,c++对自定类的算术运算部分保留给了程序员,这也是符合c++灵活特性的. 在c++中要想实现这样的

C++递增(增量)运算符重载的思考

在前面的章节中我们已经接触过递增运算符的重载,那时候我们并没有区分前递增与后递增的差别,在通常情况下我们是分别不出++a与a++的差别的,但的确他们直接是存在明显差别的. 先看如下代码: #include <iostream>using namespace std; int main(){ int a=0; ++(++a);//正确,(++a)返回的是左值 (a++)++;//错误,(a++)返回的不是左值 system("pause");} 代码中(a++)++编译出错误

C++中利用构造函数与无名对象简化运算符重载函数

在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的: //程序作者:管宁//站点:www.cndev-lab.com//所有稿件均有版权,如要转载,请务必著名出处和作者 #include <iostream>using namespace std; class Test{ public: Test(int a) { Test::a = a; } friend Test operator + (Test&,int); public: int a

Python运算符重载用法实例

  本文实例讲述了Python运算符重载用法.分享给大家供大家参考.具体分析如下: python中,我们在定义类的时候,可以通过实现一些函数来实现重载运算符. 例子如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 # -*- coding:utf-8 -*- ''''' Created on 2013-3-21 @author: naughty ''' class Test(object): def __init__(self, value): self.value = v