覆盖在C++类
一个方法,如果我有这个类:覆盖在C++类
class FooBar {
public:
FooBar(int qux);
void bar();
void foo1();
void foo2();
//...
void foo99();
}
我如何可以覆盖在FooBar
的bar
方法,同时仍然能够使用所有其他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
?
您制作bar
virtual
,因为重写只适用于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?
@LuchianGrigore:那是真的。 –
从问题中不清楚他真的想要什么。 – tenfour
@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()
。
这是很多foos。 – chris
你的意思是重写,还是重载? – juanchopanza
你可以更具描述性 - 你究竟想要什么?提供真实的环境; 'foo'和'bar'没有意义。 – tenfour