代理类代理副本而不是对象本身的原因?
// hello.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
class Vehicle
{
public:
virtual void printl()=0;
virtual Vehicle* copy()=0;
};
class Car:public Vehicle{
public:
void printl()
{
cout<<"hello Car!"<<endl;
}
Vehicle* copy()
{
return new Car(*this);}
};
class Bike:public Vehicle{
public:
void printl()
{
cout<<"hello Bike!"<<endl;
}
Vehicle* copy();
};
Vehicle* Bike::copy()
{
return new Bike(*this);}
class FFVehicle
{
public:
FFVehicle():p(0){};
FFVehicle(Vehicle &w):p(w.copy()){};
~FFVehicle(){
delete p;
}
FFVehicle(FFVehicle& ww):p(ww.p?ww.p->copy():0){}
FFVehicle& operator=(FFVehicle &ww){
if(this !=&ww){
delete p;
p=(ww.p?ww.p->copy():0);
}
return *this;
}
FFVehicle& operator=(Vehicle &ww){
p=&ww;
return *this;
}
void print()
{
p->printl();
}
private:
Vehicle *p;
};
int _tmain(int argc, _TCHAR* argv[])
{
/*Vehicle* ptr[100];
int i;
Car x;
Bike y;
Vehicle* ptr[100];
ptr[0]=x.copy();
ptr[1]=new Bike(y);
(*ptr[0]).printl();
//delete y;
(*ptr[1]).printl();
temp();
//(*ptr[2]).printl();*/
int i=0;
FFVehicle ptr[100];
Car x;
Bike y;
ptr[0]=FFVehicle(x);
ptr[0].print();
ptr[1]=y;
ptr[1].print();
cin>>i;
return 0;
}
如题 书上说的都是通过copy函数返回一个对象的副本,为什么呢?
[解决办法]
- C/C++ code
Vehicle* copy(){ return new Car(*this); //这里调用了Car::Car(Car const&),因为是拷贝构造,所以生成的对象与*this有且 生成对象和*this不是同一个对象,所以, 返回的是副本。 }