一般基类中的虚拟函数是public的,我们的派生类在实现基类中的虚拟函数时,可以在派生类中将
该函数的访问修饰符修改为private的。看如下代码:
- #include <iostream>
-
using std::ostream;
-
using std::endl;
-
using std::cout;
-
-
class Base
-
{
-
public:
-
virtual void print(ostream& os) { os << "Base" << endl; }
-
};
-
-
class Derived: public Base
-
{
-
private:
-
void print(ostream& os) { os << "Derived" << endl; }
-
};
-
-
void fun(class Base& obj)
-
{
-
obj.print(cout);
-
}
-
-
int main()
-
{
-
Derived d;
-
Base b;
-
-
fun(b);
-
fun(d);
- //d.print(cout); //error: ‘virtual void Derived::print(std::ostream&)’ is private
- return 0;
-
}
运行结果为:
我们注意到print函数在基类Base中是public的,但是在派生类中print函数是private的!从输出的结果
可以看出fun函数中调用了Derived类中private的print函数。也就是说,我们在实现基类的虚拟函数时,
可以在派生类只能该修改它的访问修饰符。在《C++沉思录》中看到了这种类似的写法。
阅读(1487) | 评论(0) | 转发(0) |