继承的小问题

class A 

{

public:

A(int x):i(x) {}


void foo()

{

cout<<"A"<<endl;

}


protected:

int i;

};


class B : public A 

{

public:

B(int x, int y):A(x), i(y) {}


void foo()

{

cout<<"B"<<endl;

}


void display()

{

cout<<A::i + i<<endl;

}


private:

int i;

};



int main()

{

A a(10);

B b(100, 200);

a.foo();

b.foo();

b.A::foo();

b.display();

}


改程序的输出是A B A 300


说明:

1、如果基类声明了一个虚函数void foo()的话,在派生类中想覆盖这个函数的话必须定一个完全一摸一样的函数,包括返回值,才可以覆盖基类的虚函数。


2、如果基类声明了一个普通的成员函数(非虚函数)void foo(),在派生类同样声明一个一摸一样的函数void foo(), 则派生类的这个函数不覆盖基类饿同名函数,它们还是各归各的。

3、如果基类中声明可一个成员变量int i; 如果在派生类中声明一个完全同名的成员变量int i; 则派生类的i也不会覆盖基类的i,它们还是各归各的。

4、继承的时候,基类的私有成员无论何种继承方式下都不能被派生类访问,包括派生类的成员函数也不可以访问。


posted @ 2009-06-26 11:46  小 楼 一 夜 听 春 雨  阅读(127)  评论(0编辑  收藏  举报