注册 登录
编程论坛 C++教室

[分享]一个有趣的小程序

hegj 发布于 2007-11-02 21:35, 3596 次点击
与大家分享一个有趣的程序。摘自《21天学通c++》
#include<iostream>

using namespace std;
class SimpleCat
{
public:
SimpleCat();
SimpleCat(SimpleCat&);
~SimpleCat();
};

SimpleCat::SimpleCat()
{
cout << "Simple Cat Constructor..." << endl;
}

SimpleCat::SimpleCat(SimpleCat&)
{
cout << "Simple Cat Cope Constructor ..." << endl;
}

SimpleCat::~SimpleCat()
{
cout << "Simple Cat Destructor ..." << endl;
}

SimpleCat FunctionOne(SimpleCat thecat);
SimpleCat* FunctionTwo(SimpleCat *theCat);

int main()
{
cout << "Making a cat..." << endl;
SimpleCat Frisky;
cout<<"Calling FunctionOne..." << endl;
FunctionOne(Frisky);
cout << "Calling FunctionTwo..." << endl;
FunctionTwo(&Frisky);
return 0;
}

SimpleCat FunctionOne(SimpleCat theCat)
{
cout << "Function One . Returning..." << endl;
return theCat;
}

SimpleCat* FunctionTwo(SimpleCat *theCat)
{
cout << "Function Two. Returning..." << endl;
return theCat;
}
希望没打错.
这个程序旨在讲解为什么要用引用传递对象。
大家可以看看输出,从中可以收获不少。
可以看到构造,复制构造,析构函数怎样调用。
本人觉得挺有意思的。

[此贴子已经被作者于2007-11-2 23:07:14编辑过]

6 回复
#2
aipb20072007-11-02 22:00
加点说明
#3
冷云逸2007-11-02 22:27
为什么有趣呀?
#4
冷云逸2007-11-02 22:33
看了 你是不是想让我们看一下程序执行的先后顺序呀?
#5
hegj2007-11-02 23:26
输出:
Making a cat...
Simple Cat Constructor... //声明Frisky时,调用默认构造函数
Calling FunctionOne...
Simple Cat Cope Constructor ... //按值传递,会在堆栈中创建一个Frisky的复制1,作为函数的局部对象
Function One . Returning...
Simple Cat Cope Constructor ... //按值返回,会生成一个复制2
Simple Cat Destructor ... //返回值没有被赋给任何对象,因此为返回而创建的临时对象被丢弃,导致析构函数被调用
Simple Cat Destructor ... //FanctionOne 结束,局部拷贝不再在作用域,因此被销毁,复制1析构
Calling FunctionTwo... //按引用传递,不会创建对象拷贝,按引用返回,也不会创建拷贝,不用调用复制构造函数与析构函数。可以效率很多
Function Two. Returning...
Simple Cat Destructor ... //程序结束,Frisky不再在作用域,调用析构函数将其销毁。

希望与大家分享。一起进步。。。
#6
a217zxg2007-11-03 19:16
    这个主要是弄清构造与析构的顺序就是了!
#7
孤魂居士2007-11-03 23:08
在网吧  无法调试 等待寝室牵网  究竟如何  趣
1