C++按值返回对象和按引用返回对象问题

jackeyaw 2008-03-16 07:38:32
我在书上学习时有以下一个程序:
#include <iostream>

using namespace std;

class SimpleCat
{
public:
SimpleCat (int age, int weight);
~SimpleCat();
int GetAge(){return itsAge;}
int GetWeight(){return itsWeight;}

private:
int itsAge;
int itsWeight;
};

SimpleCat::SimpleCat(int age,int weight)
{
itsAge=age;
itsWeight=weight;
}

SimpleCat::~SimpleCat()
{
}

SimpleCat & TheFuction();

int main()
{

SimpleCat &rCat=TheFuction();
int age=rCat.GetAge();
cout<<"rCat is: "<<age<<" years old!"<<endl;
cout<<"&rCat: "<<&rCat<<endl;
SimpleCat *pCat=&rCat;
delete pCat;//删除指针后&rCat指向为空!
return 0;

}

SimpleCat &TheFuction()
{
SimpleCat *Frisky=new SimpleCat(5,9);
return *Frisky;
}

书上说这个程序有问题,问题我在注释中写出来了,书上说这个问题有三种解决办法:
1。在main()函数中声明一个SimpleCat对象,然后从函数TheFuction()按值返回该对象
2。仍在函数TheFuction()中声明一个位于自由存储区中的SimpleCat对象,但让函数TheFuction()返回一个指向该对象的指针,使用完该对象后,调用函数可以将该指针删除
3。在调用函数中声明对象,然后按引用将它传递给函数TheFuction()
我是一个初学者,不知道这三种解决方法怎么样去实现,希望大家指点一下我,最好把这三种方法对应的程序都写出来,让我更好的能学习什么是按值返回对象,什么是按引用返回对象,谢谢各位了,请各位不吝赐教

我分数太少了,只给20分,多谢
...全文
208 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yutang123456 2009-03-08
  • 打赏
  • 举报
回复
返回对象是指在调用这个函数处会产生一个对象。例如:class F{private:i;
public:
F(int i);}
F::F(int ii){return i=ii;}

F func(){}
main()
{func()=F(1);...........................*
}

*号行的意思是调用func函数产生一个对象,然后用F(1)对这个对象进行初始化。
jackeyaw 2008-03-16
  • 打赏
  • 举报
回复
非常感谢 我再好好体会一下!
DuDu_Moon 2008-03-16
  • 打赏
  • 举报
回复
第三个:在调用函数中声明对象,然后按引用将它传递给函数TheFuction()
没明白什么意思。如果是在在调用函数中声明对象,然后按引用返回该对象的话,这样是很危险的做法。
因为在函数中声明的是临时对象,当函数调用完成时该对象将被析构,即不存在了。
返回一个不存在的对象很危险。
DuDu_Moon 2008-03-16
  • 打赏
  • 举报
回复
第二个
SimpleCat* TheFuction(); 

int main()
{

SimpleCat* rCat = TheFuction();
int age = rCat->GetAge();
cout << "rCat is: " << age << " years old!" << endl;
cout << "&rCat: " << &rCat << endl;
delete rCat;
return 0;
}

SimpleCat* TheFuction()
{
SimpleCat* Frisky = new SimpleCat(5, 9);
return Frisky;
}
DuDu_Moon 2008-03-16
  • 打赏
  • 举报
回复
第一个很好实现啊。

SimpleCat TheFuction();

int main()
{

SimpleCat rCat = TheFuction();
int age = rCat.GetAge();
cout << "rCat is: " << age << " years old!" << endl;
cout << "&rCat: " << &rCat << endl;
return 0;

}

SimpleCat TheFuction()
{
SimpleCat Frisky(5, 9);
return Frisky;
}

64,637

社区成员

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

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