gpt4 book ai didi

c++ - 是否可以在构造函数中使用模板方法模式?

转载 作者:太空狗 更新时间:2023-10-29 23:06:49 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Calling virtual functions inside constructors

我有一个类 Shape 及其子类 Sphere :

//Shape : 

class Shape
{
public:
Shape(const string& name);
virtual ~Shape();

virtual string getName();

protected:

string mName;

};

Shape::Shape(const string& name) : mName(name)
{
/*Some stuff proper to Shape*/

/*Some stuff proper to subclass (sphere)*/

/*Some stuff proper to Shape*/
}

Shape::~Shape(){}

string Shape::getName(){ return mName; }


//Sphere :

class Sphere : public Shape
{
public:
Sphere(const string& name, const float radius);
virtual ~Sphere();

virtual string getRadius();

protected:

float mRadius;
}

Sphere::Sphere(const string& name, const float radius) : Shape(name), mRadius(radius)
{
/*Some stuff*/
}

Sphere::~Sphere(){}

float Sphere::getRadius(){ return mRadius; }

现在,我如何处理 Shape 构造函数中的子类内容?我可以诉诸 template method pattern但是我将被迫在构造函数中调用纯虚函数;我试过了,编译器不喜欢它

编辑:

我选择将构造函数的东西移动到一个新方法“init”中,虚拟方法将是“subInit”:

//Shape : 

class Shape
{
public:
Shape(const string& name);
virtual ~Shape();

virtual string getName();

virtual void init();

protected:

string mName;

virtual void subInit() = 0;

};

Shape::Shape(const string& name) : mName(name){}

Shape::~Shape(){}

string Shape::getName(){ return mName; }

void Shape::init()
{
/*Some stuff proper to Shape*/

/*Some stuff proper to subclass (sphere)*/
/*Call to the pure virtual function subInit*/

subInit();

/*Some stuff proper to Shape*/
}

//Sphere :

class Sphere : public Shape
{
public:
Sphere(const string& name, const float radius);
virtual ~Sphere();

virtual string getRadius();

protected:

float mRadius;

void subInit();
}

Sphere::Sphere(const string& name, const float radius) : Shape(name),mRadius(radius)
{}

Sphere::~Sphere(){}

float Sphere::getRadius(){ return mRadius; }

Sphere::subInit()
{
/*Some stuff previously in the constructor*/
}

基本上就是模板方法模式

客户会写:

Shape* sphere = new Sphere();
sphere->init();

然后我有了答案:不可能在构造函数中应用这种模式,至少在 C++ 中是这样

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com