2 olivertai olivertai 于 2016.02.09 05:29 提问

一个关于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];
}

2个回答

caozhy
caozhy   Ds   Rxr 2016.02.09 07:15
已采纳

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

#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

olivertai
olivertai 回复caozhy: 十分感谢~
2 年多之前 回复
qq_28768929
qq_28768929   2016.02.12 19:50

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++语法,复制构造函数与=运算符重载
C++:复制构造函数在什么时候被调用?它和operator = 区分 1、对象在创建时使用其他的对象初始化 Person p(q); //此时复制构造函数被用来创建实例p Person p = q; //此时复制构造函数被用来在定义实例p时初始化p 2、对象作为函数的参数进行值传递时 f(p); //此时p作为函数的参数进行值传递,p入栈时会调用复制构造函数创建一个局部对象,
【c/c++】类型转换函数(类型转换运算符重载函数)
用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。 C++提供类型转换函数(type conversion function)来解决这个问题。类型转换函数的作用是将一个类的对象转换成另一类型的数据。如果已声明了一个Complex类,可以在Complex类中这样定义类型转换函数
c++单链表【构造函数、运算符重载、析构函数、增删查改等】
c++中的单向链表写法:实现增删查改、构造函数、运算符重载、析构函数等。建立头文件SList.h#pragma once typedef int DataType; //SList要访问SListNode,可以通过友元函数实现,友元函数在被访问的类中 class SListNode { friend class SList;//友元函数 public: SListNode(const Dat
c++中类的默认四个成员函数介绍(构造函数+拷贝构造+析构函数+赋值运算符重载函数)
在C++中,类的6个默认的成员函数包括:构造函数、析构函数、拷贝构造函数、赋值运算符重载函数、取地址操作符重载、const修饰的取地址操作符重载。本文将主要介绍前四个成员函数:一、构造函数在c++程序中,对象的初始化时一个不可缺少且十分重要的问题,因此c++在类的设计中提供了构造函数。 构造函数,顾名思义,为对象分配空间,进行初始化,它是一种特殊的成员函数,具有以下特点: 1.函数名与类名相同。
构造函数,拷贝构造函数,析构函数,运算符重载
一、构造函数 1、概念  构造函数是一种特殊的成员函数。名字与类名相同,创建类类型对象时,由编译器自动调用,在对象的声明周期内只调用一次,以保证每个数据成员都有一个合适的初始值。   2、构造函数的特性 (1)函数名与类名相同; (2)没有返回值; (3)有初始化列表; (4)新对象被创建,由编译器自动调用,且在对象的生命周期内仅调用一次; (
C++:构造函数,析构函数及友元函数
我们先从一个题来开始:这是改正之后的样子。 #include using namespace std; class MyClass { public: MyClass(int x):number(x) {} // ERROR **********found********** ~MyClass() {} //~MyClass(int x) {} // ERROR ******
C++特殊语法
static_cast和reinterpret_cast #和## 构造函数和拷贝构造函数 类型转换问题 指针悬挂问题 运算符重载等等
C++时间类的运算符重载
 Description C++时间类的运算符重载 定义一个时间类Time,其数据成员为表示时间的小时(hour)、分(minute),秒(second)。 重载运算符“+”,使之能用于时间对象的加法运算;重载运算符“ (1)参加运算的两个操作数可以都是时间类对象,也可以其中有一个是整数(表示秒),顺序任意。 例如,t1+t2,i+t1,t1+i均合法(设i为整数表示秒数, t
C/C++编程细节(三)——类、继承、模板、运算符重载
1、类、派生类 C++中类的概念很重要,重要到什么程度呢?把class/struct看成和main同一个等级,为什么这么说呢?因为,C++中不允许全局变量独立于类外, 所以,在一个C++文件中,除了头文件,就是class和main了。当然这只是其中一个原因。另外,类可以看做一种类型,和C中struct类似的一种类型。
创建一个CPoint类,代表平面直角坐标系中的点,创建构造函数和运算符重载函数, 运算符重载为类重载(非友元重载),可以实现计算两个点之间的距离。可以根据需要 加入自己的成员变量或成员函数
创建一个CPoint类,代表平面直角坐标系中的点,创建构造函数和运算符重载函数,运算符重载为类重载(非友元重载),可以实现计算两个点之间的距离。可以根据需要 加入自己的成员变量或成员函数. #include #include //#include using namespace std; class CPoint { double x,y; public: CPoint(double xx