覆盖在C++类

问题描述:

一个方法,如果我有这个类:覆盖在C++类

class FooBar { 
    public: 
     FooBar(int qux); 
     void bar(); 

     void foo1(); 
     void foo2(); 
     //... 
     void foo99(); 
} 

我如何可以覆盖在FooBarbar方法,同时仍然能够使用所有其他foo方法,无需重新定义它们?

编辑:

我想用这样的:

FooBar2 baz(1); // call the constructor of FooBar, FooBar(1) 
baz.foo1(); //call method foo1 of original FooBar 
baz.bar(); // call method bar of FooBar2 

我宁愿不编辑Foobar的页眉或执行。

是否有可能使构造函数调用原始构造函数FooBar

+0

这是很多foos。 – chris

+0

你的意思是重写,还是重载? – juanchopanza

+1

你可以更具描述性 - 你究竟想要什么?提供真实的环境; 'foo'和'bar'没有意义。 – tenfour

您制作barvirtual,因为重写只适用于virtual方法。

然后您扩展FooBar并为bar提供新的实现。

class FooBar { 
    public: 
     virtual void bar(); 

     void foo1(); 
     void foo2(); 
     //... 
     void foo99(); 
}; 

class FooBarDerived : FooBar 
{ 
    public: 
     void bar(); 
}; 

你需要的是功能隐藏,而不是overridding
仅当涉及到关键字virtual时,Overidding才适用。

只是重新定义你想在派生类中重载的方法,你应该没问题。

class YourClass: public FooBar 
{ 
    public: 
     void bar(){} 
}; 

YourClass对象可以访问FooBar所有的方法,因为这些都是public方法和类从中派生公开,而YourClass::bar()隐藏FooBar::bar()

编辑:
你编辑的问题讲清楚功能隐藏确实是你所需要的。
这是隐藏功能的online demo达到您的要求。

是否也可以使构造函数从FooBar调用原始的构造函数?

可以使用成员初始化列表调用通过派生类的构造适当的基类构造函数。

良好阅读:
What is this weird colon-member (" : ") syntax in the constructor?

+0

@LuchianGrigore:那是真的。 –

+1

从问题中不清楚他真的想要什么。 – tenfour

+0

@tenfour:*“我怎样才能覆盖'FooBar'中的bar方法,同时仍然能够使用所有其他'foo'方法而不需要再次定义它们?”*对我来说似乎很清楚/直观。 –

继承。

class FooBar 
{ 
public: 
    virtual void bar() { ... default implementation ... } 
    void foo1(); 
    void foo99(); 
} 


class FooBarVariation : public FooBar 
{ 
public: 
    virtual void bar() { ... different implementation ... } 
} 

FooBarVariation会像一个FooBar,但有不同的实施bar()