}
结果:
Super says hi in public talk( )
Sub says hi in protected talk( )
这也证明在子类中确实覆盖了方法,并且声明为protected成功,但是,如果超类使得其为public,就不能完全保证protected访问。
所以,可知改变方法访问级别的唯一有用方式是给超类的protected方法提供约束更少的方法:在子类中有public方法提供一个
对超类protected方法的接口。
八、类继承时复制构造函数与相等操作符
如果子类中没有特殊的数据(通常是指针)需要非默认的复制构造函数或operaotr=,就不许要有非默认的复制构造函数,不管超类中是否包括非默认的复制构造函数。如果子类中省略了复制构造函数,在复制对象时依然会调用父类的复制构造函数。operator=与复制构造函数类似。
注意:
如果子类中没有指定复制构造函数或operator=,父类的功能继续有效。如果子类覆盖自己的复制构造函数和operator=,则需要明确引用父类的复制构造函数或operator=。
如:
Sub& Sub::operator=( const Sub& inSub)
{
if( &inSub==*this )
return *this;
Super::operator=( inSub ); //call parent's operator=( )
//some other operations
return ( *this );
}