一个关于c++构造函数和运算符重载的问题

问题描述

一个关于c++构造函数和运算符重载的问题

代码如下,具体情况是,我定义了一个有形参的构造函数和+号运算符重载,我觉得两个是独立的,但是在调用+号运算符重载时发现同时又调用了这个构造函数,因为我在函数里写了输出语句,所以被调用时我能看到,c++小白想请问各位大神是为什么?是运算符重载函数写的有问题吗?多谢各位~~
//constructeur 2
BigInt::BigInt(int n):numDigits(0)
{
cout << "constructeur 2 bien appelé" << endl;
int quotient = n;
int residu;
cout << "l'entier que vous donnez est ";
for(int i=0;i
{
numDigits++;
residu = quotient%10;
quotient = quotient/10;
vals[i] = residu;
if(residu == 0 && quotient == 0)
{
break;
}
cout
}
cout
cout
}
//surcharge de l'operateur+
BigInt BigInt::operator+(const BigInt& a)
{
cout
int temp[3000];
int r = 0;
for(int i=0;i
{
temp[i] = vals[i] + a.vals[i] + r;
if(temp[i]>9)
{
r = 1;
temp[i] -= 10;
}
else{r = 0;}
cout << temp[i] << " ";
}
cout << endl;
return temp[numDigits];
}

解决方案

你的判断是对的,重载的运算符会调用拷贝构造函数,把结果放在堆栈上,看下面的最简单的程序

#include <iostream>
using namespace std;
class A
{
public:
    A() { cout << "A()" << endl; }
    A(A& o){ cout << "A(A& o)" << endl; }
    A operator+(A& o){ return o; }
};
int main()
{
    A a, b;
    a + b;
    return 0;
}

A()
A()
A(A& o)
Press any key to continue

解决方案二:

你把返回类型写成引用试试,我记得函数返回的时候也会调用拷贝构造函数和构造函数。并不是重载运算符的问题

时间: 2024-09-17 04:14:54

一个关于c++构造函数和运算符重载的问题的相关文章

拷贝构造函数和运算符重载

拷贝构造函数应用的场合由以下几个方面: 1 函数的参数是一个对象,并且是值传递方式 2 函数的返回值是一个对象,并且是值传递方式 3 用一个对象初始化另外一个对象 由此,当函数的参数或者返回值为一个对象时,使用的时候要小心,因为值传递的时候执行的是位拷贝,并不会调用对象的构造函数,也就是说生成的临时对象可能不是正确初始化的,这样就可能会出现一些意向不到的问题.当返回值是个对象和用一个对象初始化另外一个对象时的情况是相同的. 比如如下代码: #include <iostream> using n

C++的算符重载

算符重载的作用是什么?它允许你为类的用户提供一个直觉的接口. 算符重载允许C/C++的运算符在用户定义类型(类)上拥有一个用户定义的意义.重载的算符是函数调用的语法修饰: class Fred { public: // -};#if 0 // 没有算符重载:Fred add(Fred, Fred);Fred mul(Fred, Fred);Fred f(Fred a, Fred b, Fred c){ return add(add(mul(a,b), mul(b,c)), mul(c,a));

Javascript核心读书有感之表达式和运算符

这篇文章主要介绍了Javascript核心读书有感之表达式和运算符,十分详细,需要的朋友可以参考下     表达式是javascript中的一个短语,javascript解释器会将其计算出一个结果.程序中常用量是最简单的一类表达式就是变量.变量名也是一种简单的表达式,它的值就是赋值给变量的值. 复杂的表达式是由简单的表达式组成的.比如数组访问表达式是由一个表示数组的表达式,方括号.一个整数表达式构成.它们所组成新的表达式运算结果是该数组特定位置的元素值.同样的函 数调用表达式由一个表示函数对象的

《Python语言程序设计》——2.8 数值数据类型和运算符

2.8 数值数据类型和运算符 关键点:Python中有两种数值类型(整数和浮点数)与+.-.././/.%和*一起工作. 储存在计算机中的信息通常被称为数据.这里有两种数值数据类型:整数和实数.整数类型Integer(简写作int)用于表示整数.实数型用于表示有小数部分的数字.在计算机中,这两种数据类型的存储方式不同.实数型表示为浮点数.我们怎样告知Python一个数字是整数还是浮点数呢?一个拥有小数点的数字即使小数部分为零也是浮点数.例如:1.0是浮点数,而1是整数.这两个数字在计算机里的存储

c++-关于复制构造函数跟赋值运算符重载

问题描述 关于复制构造函数跟赋值运算符重载 新手求指导 关于两个函数不太理解 复制构造的是同一个内存地址吗 为什么要重载赋值运算符 解决方案 赋值运算符和复制构造函数都是用已存在的B对象来创建另一个对象A.不同之处在于:赋值运算符处理两个已有对象,即赋值前B应该是存在的:复制构造函数是生成一个全新的对象,即调用复制构造函数之前A不存在. CTemp a(b); //复制构造函数,C++风格的初始化 CTemp a=b; //仍然是复制构造函数,不过这种风格只是为了与C兼容,与上面的效果一样 在这

《C语言程序设计与实践(第2版)》——3.4 表达式和运算符

3.4 表达式和运算符 C语言的运算符范围很广,具有非常丰富的运算符和表达式运算,为编写程序提供了方便.表达式是由操作数和运算符组成,运算后产生一个确定的值,其中操作数可以是常量.变量.函数和表达式,每个操作数都具有一种数据类型,通过运算得到的结果也具有一种数据类型,结果的数据类型与操作数的数据类型可能相同,也可能不相同.运算符指出了表达式中的操作数如何运算.C语言中共有44种运算符,根据各运算符在表达式中的作用,表达式大致可以分成算术表达式.关系表达式.逻辑表达式.条件表达式.赋值表达式和逗号

《21天学通Java(第6版)》—— 2.5 表达式和运算符

2.5 表达式和运算符 21天学通Java(第6版) 表达式是一条能够提供值的语句.最常见的是数学表达式,如下面的例子所示: 这3条语句都是表达式-它们提供了可被赋给变量的值.第1条语句将字面量3赋给变量x.第2条语句将变量x的值赋给变量y.在第3条语句中,乘法运算符*用来将x和y相乘,结果存储在变量z中. 表达式可以是任何变量.字面量和运算符的组合,也可以是方法调用,因为方法能够将一个值返回给调用它的类或对象. 您知道,表达式所提供的值称为返回值.在Java程序中,可将这个值赋给变量或以其他方

《21天学通Java(第7版)》—— 2.5 表达式和运算符

2.5 表达式和运算符 表达式是一条能够提供值的语句.最常见的是数学表达式,如下面的例子所示: int x = 3; int y = x; int z = x * y; 这3条语句都是表达式--它们提供了可被赋给变量的值.第1条语句将字面量3赋给变量x.第2条语句将变量x的值赋给变量y.在第3条语句中,乘法运算符*用来将x和y相乘,结果存储在变量z中. 表达式可以是变量.字面量和运算符的任何组合,也可以是方法调用,因为方法能够将一个值返回给调用它的类或对象. 您知道,表达式所提供的值称为返回值.

《趣学JavaScript——教孩子学编程》——第2章 类型与变量2.1 数字和运算符

第2章 类型与变量 趣学JavaScript--教孩子学编程 编程其实就是操作数据,可什么是数据呢?数据就是我们保存在计算机程序中的信息.例如,你的名字就是一条数据,年龄也是一条数据.你头发的颜色,有几个兄弟姐妹,住在什么地方,是男生还是女生--所有这些都是数据. JavaScript中有3种基本的数据类型:数字.字符串和Boolean(布尔类型).number用来表示数字.例如,年龄可以用一个number表示,身高也可以用number表示.JavaScript中的数字如下所示: 字符串用来表示