关于C++类成员继承的问题

来源:百度知道 编辑:UC知道 时间:2024/09/25 09:38:24
刚学类继承遇到点问题,请前辈们帮忙
请看以下代码,问题:B类继承A类,两个类都有个P()函数,而且都是void类型,那B类继承了A类的P函数,调用时为什么程序还能分清我调的是继承过来的P,还是B类的P呢?我用VC运行的,能正确运行

#include <iostream.h>

class A
{
public:
A()
{
cout<<"star a"<<endl;
}
~A()
{
cout<<"end a"<<endl;
}

void P()
{
cout<<"a"<<endl;
}
};

class B:public A
{
public:
B()
{
cout<<"star b"<<endl;
}
~B()
{
cout<<"end b"<<endl;
}

void P()
{
cout<<"b"<<endl;
}

};

void main()
{
A a;
B b;
a.P();
b.P();
}
我是说调用B类的对象时,既然B类继承了A类的P,而自己也定义了一个P,那就有两个P了,难道B类的P会覆盖A类的P吗?这样算是重载吗?

因为虽然继承过来了,但A和B仍然是两个不一样的东西啊,程序当然能够分辨出来了。

你这个其实是覆盖了 覆盖和重载是两个东西哟。 覆盖是同名函数 在子类父类不同方法。重载是在父类有同名函数 不同参数的函数

是重载

你所指的对象不同 对象不同 调用当然就不同

继承的时候,如果在派生类中定义了与基类成员同名的成员,则称派生类成员覆盖了基类的同名成员,在派生类中使用这个名字意味着访问在派生类中重新说明的成员。 如果要在派生类中使用基类的同名成员,必须在该成员名之前加上基类名和作用域标识符“::”,
如果把main()改为下面,则打印两个a
void main()
{
A a;
B b;
a.P();
b.A::P();
}