我遇到一个小问题而且不知道在这种情况下该怎么做: 我有第一个类(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();
在main函数中,我已动态声明了这个立方体:
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
};
根据这些变化,在主要功能中我仍然可以进行以下调用:
C->PrintObj(0);//A cube should be called with no arguments
T->PrintObj();//a teapot should be called only with arguments
我想避免;我可以访问这些方法,尽管它们是私有的,因为我将对象动态地声明为Object3D(我认为这就是为什么?)
答案 0 :(得分:0)
解决方案非常简单。你需要将第二种方法设为私有。
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};
//..
};