继承的小问题
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、继承的时候,基类的私有成员无论何种继承方式下都不能被派生类访问,包括派生类的成员函数也不可以访问。