继承中的同名函数
重载:必须在同一个类中进行子类无法重载父类的函数,父类同名函数将被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用
重定义:必须发生于父类与子类之间并且父类与子类中的函数必须有完全相同的原型(如果用virtual关键字修饰,那叫重写)
示例程序:
#include <iostream>
using namespace std;
// 关于继承中的重载问题
// 重载只能发生在一个类之中, 派生类不能重载基类的同名函数
// 当派生类重载基类的函数的时候,会将基类所有同名函数全屏蔽掉,不能再使用
// 重定义:派生类有和父类 成员函数原型一样的函数,叫函数重定义
class Parent
{
public:
void print()
{
printf ("a = %d, b = %d\n", a, b);
}
void func()
{
printf ("基类: 无参\n");
}
void func(int a)
{
printf ("基类: 有一个参数\n");
}
public:
int a;
int b;
};
class Child : public Parent
{
public:
// 派生类的同名成员函数会屏蔽基类的同名成员函数
// 函数原型一样, 叫函数重定义
void print()
{
printf ("a = %d, c = %d\n", a, c);
}
void func(int a, int b)
{
printf ("派生类: 有两个参数\n");
}
public:
int a;
int c;
};
int main()
{
Child c;
c.Parent::a = 1;
c.b = 2;
c.a = 3;
c.c = 4;
// 默认使用派生类的函数
c.print();
c.Parent::print();
c.Parent::func();
// c.func(10); //error C2660: “Child::func”: 函数不接受 1 个参数
c.func(1,2);
return 0;
}
执行结果:
a = 3,c = 4
a = 1,b = 2
基类: 无参
派生类: 有两个参数