1.
class SimpleCat
{ int itsAge;
public:
SimpleCat();
SimpleCat( SimpleCat &);
~SimpleCat();
int GetitsAge();
};
SimpleCat::SimpleCat()
{
cout<<"Simple Cat Constructor.."<<endl;
itsAge = 1;
}
SimpleCat::SimpleCat( SimpleCat&)
{
cout<<"SimpleCat copy Constructor.."<<endl;
}
SimpleCat::~SimpleCat()
{
cout<<"Simple Cat Destructor.."<<endl;
}
int SimpleCat::GetitsAge() {return itsAge;}
SimpleCat FunctionsOne( SimpleCat &theCat);
int main()
{
cout<<"Making a cat..."<<endl;
SimpleCat Frisky;
cout<<"Caling FunctionOne.."<<endl;
cout<<"!!!!!!!!!!!!!!!!"<<endl;
FunctionsOne(Frisky);
cout<<"!!!!!!!!!!!!!!!!"<<endl;
SimpleCat Lucy = FunctionsOne(Frisky);
cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
cout<<Frisky.GetitsAge()<<endl;
cout<<Lucy.GetitsAge()<<endl;
return 0;
}
SimpleCat FunctionsOne( SimpleCat &theCat)
{
cout<<"Functions One. Returning"<<endl;
return theCat;
}
1.用来观察按值传递参数时Copy Constructor和Destructor是如何运作的。
对比FunctionsOne(Frisky)和SimpleCat Lucy = FunctionsOne(Frisky)二者的输出情况。想知道这是为啥?难道因为在FunctionsOne中return的临时拷贝给了Lucy所以就不用destructor了么?还有,为何Lucy的值是这个?即便把Lucy那段代码改成
SimpleCat Lucy;
cout<<lucy.GetitsAge()<<endl;
Lucy = FunctionsOne(Frisky);
cout<<lucy.GetitsAge()<<endl;
可以发现结果还是会变。