我一直在玩继承,我试过这个代码:
#include <iostream>
#include <string>
class Foo
{
public:
virtual void func() = 0;
protected:
virtual void doSum() const = 0;
};
class Bar : public Foo
{
public:
void func() {
doSum();
}
protected:
void doSum() const
{
std::cout << "hi, i'm doing something" << std::endl;
}
};
int main()
{
Foo* ptr = new Bar();
ptr->func();
return 0;
}
所以我也试过像这样用 private替换protected
关键字class Bar
:
private:
void doSum() const
{
std::cout << "hi, i'm doing something" << std::endl;
}
并且代码碰巧工作得一样......
所以我的问题是,如果我在实现派生类时声明一个私有的受保护方法有什么区别吗?如果有,它们是什么?我什至可以这样做吗?
所以我的问题是,如果我在实现派生类时声明一个私有的受保护方法有什么区别吗?
是的。
如果有,它们是什么?
这将阻止派生类的下一级能够调用派生类的实现。
class Foo
{
protected:
virtual void doSum() const = 0;
};
class Bar : public Foo
{
private:
void doSum() const
{
std::cout << "hi, i'm doing something" << std::endl;
}
};
class Baz : public Bar
{
public:
void doSum() const
{
//===========================
Bar::doSum(); // NOT ALLOWED
//===========================
}
};
我什至可以这样做吗?
是的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句