首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++继承问题

C++继承问题
EN

Stack Overflow用户
提问于 2010-11-26 19:44:00
回答 6查看 727关注 0票数 1

我有一个如下的类:

代码语言:javascript
复制
Class A
{
   virtual int doSomethingCool() = 0;
};

Class B : public A
{
  int doSomethingCool();
};

现在问题就像,我有一组依赖于A作为接口的类。我需要为其中一个派生类更改函数的原型。也就是说,我需要给它传递一个参数。

代码语言:javascript
复制
Class C: public A
{
 int doSomethingCool(int param);
};

有什么建议我可以做到这一点吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-26 20:00:14

不,您不需要将其添加到基类中。

代码语言:javascript
复制
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(),您仍然可以这样做:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2010-11-26 19:48:00

将其添加到接口并将其默认为调用现有方法。您不必执行默认设置,但不要将其设置为纯的,否则所有的派生类都将不得不实现。让它保持未定义或抛出可能会更好。这取决于你想要实现什么。

代码语言:javascript
复制
class A 
{ 
public:
   virtual int doSomethingCool() = 0; 
   virtual int doSomethingCool(int param) {doSomethingCool()}; 
};
票数 1
EN

Stack Overflow用户

发布于 2010-11-26 19:47:09

让函数doSomethingCool()接受A中的int参数。

代码语言:javascript
复制
class A
{
public:
    virtual void doSomethingCool(int param) = 0;
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4284984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档