读书人

关于基类和派生类的有关问题

发布时间: 2012-04-14 17:14:21 作者: rapoo

关于基类和派生类的问题
class CBase
{
public:
char foo( int );
protected:
int m_bar;
double m_foo_bar;
};
class CDerived : public CBase
{
public:
char foo( string );
bool bar( CBase* pb );
void foobar();
protected:
string m_bar;
};
下面的代码, 正确的是( D )
A, CDerived d; d.foo( 1024 );
B, void CDerived::foobar() { m_bar = 1024; }
C, bool CDerived::bar( CBase* pb ) { return m_foo_bar == pb->m_foo_bar; }
D, void CDerived::foobar(){ CBase::m_foo_bar = 2048; }
麻烦各位给具体分析下,A B C D具体是为什么呢 谢谢了


[解决办法]
A: foo(1024) 匹配的函数是char foo( int ); 但是由于子类中重新定义了foo,覆盖了基类的foo,不涉及重载也不是多态,调用错误。
B:一样的,m_bar在子类中重新定义 覆盖了
C: pb->m_foo_bar,m_foo_bar是protected成员,只能由子类对象访问,不能用基类对象访问。
D: CBase::m_foo_bar ,加上了类作用域标示符,访问基类的double类型的m_foo_bar,没问题

读书人网 >C++

热点推荐