例如,我有这样的课程:
class Base
{
public: void SomeFunc() { std::cout << "la-la-la\n"; }
};
我从中获得了新的一个:
class Child : public Base
{
void SomeFunc()
{
// Call somehow code from base class
std::cout << "Hello from child\n";
}
};
我想看看:
la-la-la
Hello from child
我可以从派生类调用方法吗?
答案 0 :(得分:10)
不确定
void SomeFunc()
{
Base::SomeFunc();
std::cout << "Hello from child\n";
}
由于Base::SomeFunc()
未声明为virtual
,因此Derived::SomeFunc()
将隐藏在基类中,而不是覆盖它,从长远来看,肯定会引起一些令人讨厌的惊喜。因此,您可能希望将声明更改为
public: virtual void SomeFunc() { ... }
这也会自动生成Derived::SomeFunc()
virtual
,但为了清晰起见,您可能更愿意明确声明这一点。
答案 1 :(得分:4)
class Child : public Base
{
void SomeFunc()
{
// Call somehow code from base class
Base::SomeFunc();
std::cout << "Hello from child\n";
}
};
顺便说一句,您可能也想Derived::SomeFunc
public
。
答案 2 :(得分:1)
您可以通过再次调用前缀为parent类名称的函数来执行此操作。您必须为类名添加前缀,因为可能有多个父级提供名为SomeFunc的函数。如果有一个名为SomeFunc的免费函数,你希望调用它来代替:: SomeFunc可以完成工作。
答案 3 :(得分:0)
class Child : public Base
{
void SomeFunc()
{
Base::SomeFunc();
std::cout << "Hello from child\n";
}
};
答案 4 :(得分:0)
是的,你可以。请注意,您为方法指定了相同的名称而没有将它们限定为virtual
,编译器也应注意它。
class Child : public Base
{
void SomeFunc()
{
Base::SomeFunc();
std::cout << "Hello from child\n";
}
};