我有一个如下的类:
Class A
{
virtual int doSomethingCool() = 0;
};
Class B : public A
{
int doSomethingCool();
};现在问题就像,我有一组依赖于A作为接口的类。我需要为其中一个派生类更改函数的原型。也就是说,我需要给它传递一个参数。
Class C: public A
{
int doSomethingCool(int param);
};有什么建议我可以做到这一点吗?
发布于 2010-11-26 20:00:14
不,您不需要将其添加到基类中。
class A
{
public:
virtual int doSomethingCool() = 0 {}
};
class B : public A
{
public:
int doSomethingCool() {return 0;}
};
class C: public A
{
private:
int doSomethingCool(); // hide base class version!
public:
int doSomethingCool(int param) {return param;}
};如果通过基类指针调用doSomethingCool(),您仍然可以这样做:
C c;
//c.doSomethingCool (); // doesn't work, can't access private member
c.doSomethingCool (42);
A &a = c;
a.doSomethingCool ();
//a.doSomethingCool (42); // doesn't work, no member of A has that signature发布于 2010-11-26 19:48:00
将其添加到接口并将其默认为调用现有方法。您不必执行默认设置,但不要将其设置为纯的,否则所有的派生类都将不得不实现。让它保持未定义或抛出可能会更好。这取决于你想要实现什么。
class A
{
public:
virtual int doSomethingCool() = 0;
virtual int doSomethingCool(int param) {doSomethingCool()};
};发布于 2010-11-26 19:47:09
让函数doSomethingCool()接受A中的int参数。
class A
{
public:
virtual void doSomethingCool(int param) = 0;
};https://stackoverflow.com/questions/4284984
复制相似问题