[英]C++ Pure virtual method override
我面临一个小问题,不知道在这种情况下该怎么做:我有第一个类(Object3D),它是Parent类
Object3D{
public:
Object3D(){};
virtual ~Object3D(){};
///RANDOM METHODS
virtual void PrintObj() = 0;
virtual void PrintObj(double) = 0;
//etc..
private:
//..
};
如您所见,我有被重写的PrintObj()方法。 有些对象不带任何参数,例如在此子类中
class Cube : public Object3D
{
public:
Cube(unsigned char c):Object3D(c){};
~Cube(){};
void PrintObj();
private:
//..
};
其他类需要一个参数来调用PrintObj方法
class Teapot : public Object3D
{
public:
Teapot(unsigned char c):Object3D(c){};
~Teapot(){};
void PrintObj(double s){//Code};
private:
//..
};
问题在于这两个类是自动抽象的,它们从父类继承纯虚拟方法。
我曾考虑过在多维数据集类中重新定义PrintObj(double),在Teapot类中重新定义PrintObj()类,但这将允许用户调用“错误的” PrintObj()方法。
编辑:我将通过“调用错误的” PrintObj();来解释我的意思。
在主函数中,我动态声明了这个多维数据集:
Object3D *C = new Cube(250);
而且这个茶壶也是动态地:
Object3D *T= new Teapot(250);
现在,如果我以这种方式更改班级:
class Cube : public Object3D
{
public:
Cube(unsigned char c):Object3D(c){};
~Cube(){};
void PrintObj();
private:
void PrintObj(double){};// i add this method here in private
};
对于茶壶:
class Teapot : public Object3D
{
public:
Teapot(unsigned char c):Object3D(c){};
~Teapot(){};
void PrintObj(double s){};
private:
void PrintObj(){};//i add this method here in private
};
遵循这些更改之后,在main函数中,我仍然可以执行以下调用:
C->PrintObj(0);//A cube should be called with no arguments
T->PrintObj();//a teapot should be called only with arguments
我想避免的 我可以访问这些方法,尽管它们是私有的,因为我将对象动态声明为Object3D(我认为这是为什么?)
解决方案非常简单。 您需要将第二种方法设为私有。
class Cube : public Object3D
{
public:
Cube(unsigned char c):Object3D(c){};
~Cube(){};
void PrintObj();
private:
void PrintObj(double d);
};
和
class Teapot : public Object3D
{
public:
Teapot(unsigned char c):Object3D(c){};
~Teapot(){};
void PrintObj(double s){//Code};
private:
void PrintObj(){//Code};
//..
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.