关于构造函数调用的问题

qq668161 2008-09-05 03:23:21

#include <iostream.h>

class Increase{
public:
Increase(int x):value(x){}
Increase & operator++();
Increase operator++(int);
void display(){ cout <<"the value is " <<value <<endl; }
private:
int value;
};

Increase & Increase::operator++()
{
value++;
return *this;
}

Increase Increase::operator++(int)
{
Increase temp(*this); ////建立这个临时的对象,调用的是哪个构造函数?我怎么没发现有这么个构造函数?
value++;
return temp;
}

void main()
{
Increase n(20);
n.display();
(n++).display();
n.display();
++n;
n.display();
++(++n);
n.display();

(n++)++;
n.display();
}
请高手帮我个忙,问题在注释的部分,谢谢
...全文
99 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
长安宁 2008-09-05
  • 打赏
  • 举报
回复
Increase temp(*this);//看参数是一个指针,应该是调用了一个拷贝构造函数
Increase(&cc){};
Increase(int x):value(x){} //而这个,应该,这个类从什么地方,继承的一个构造函数;
qq668161 2008-09-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qq668161 的回复:]
假设我采用2L的那个构造函数,我想问一下
void main()
{
Increase n(20);
n.display();
(n++).display(); 当执行到n++返回调用构造函数的时候,构造函数体内 语句this->value = in.value
////////////////// this 是不是指向temp的复制的指针???
....//.....
}
[/Quote]

帮我回答一下吧,谢谢了!
wangdeqie 2008-09-05
  • 打赏
  • 举报
回复
Increase temp(*this); ////建立这个临时的对象,调用的是哪个构造函数?我怎么没发现有这么个构造函数?
---------------------------------------------------
因为temp的参数是类对象,所以调用的是拷贝构造函数,而你没定义,编译器会为你生成一个默认的拷贝构造函数
qq668161 2008-09-05
  • 打赏
  • 举报
回复
假设我采用2L的那个构造函数,我想问一下
void main()
{
Increase n(20);
n.display();
(n++).display(); 当执行到n++返回调用构造函数的时候,构造函数体内 语句this->value = in.value
////////////////// this 是不是指向temp的复制的指针???
....//.....
}
yshuise 2008-09-05
  • 打赏
  • 举报
回复
是编译器帮你生成的一个函数叫拷贝构造函数。
chenzhp 2008-09-05
  • 打赏
  • 举报
回复
涉及到内存分配之类的。就需要用户显示定义拷贝构造函数
e_sharp 2008-09-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qq668161 的回复:]
楼上的提醒了我,是不是他调用默认的拷贝构造函数???
[/Quote]

是的,没定义,编译器会自动生成一个copy constructor
yuwei2589 2008-09-05
  • 打赏
  • 举报
回复
楼上正解,调用的是copy constructor
你不提供也没关系,系统会给你提供默认的构造函数,对于你的这个类不会存在什么问题。

但是如果涉及到动态申请内存等,就需要你显式的提供该函数。
qq668161 2008-09-05
  • 打赏
  • 举报
回复
楼上的提醒了我,是不是他调用默认的拷贝构造函数???
xuwening 2008-09-05
  • 打赏
  • 举报
回复
楼上正解
e_sharp 2008-09-05
  • 打赏
  • 举报
回复
Increase temp(*this); ////建立这个临时的对象,调用的是哪个构造函数?我怎么没发现有这么个构造函数?

copy constructor

class Increase{ 
public:
Increase(int x):value(x){}
Increase(const Increase& in) { //拷贝构造函数
cout << "in copy constructor" << endl;
this->value = in.value ;
}
Increase & operator++();
Increase operator++(int);
void display(){ cout <<"the value is " <<value <<endl; }
private:
int value;
};


64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧