#include "iostream"
using namespace std;
using namespace std;
//重写 重载 重定义
//函数重载
//1 必须在同一个类中进行
//1 必须在同一个类中进行
//2子类无法重载父类的函数 ,父类同名函数被覆盖
//3 重载是在编译期间根据参数类型和个数决定函数调用
//函数重写
//必须发生于父类与子类之间
//并且 父类与子类中的函数必须有完全相同的类型
//使用virtual声明之后能够产生多态(如果不使用virtual 叫重定义)
//多态是在运行期间根据具体对象的类型决定函数的调用
//必须发生于父类与子类之间
//并且 父类与子类中的函数必须有完全相同的类型
//使用virtual声明之后能够产生多态(如果不使用virtual 叫重定义)
//多态是在运行期间根据具体对象的类型决定函数的调用
class Parent
{
public:
virtual void func()
{
cout << "P_func () " << endl;
}
virtual void func(int i, int j)
{
cout << "P_func(a,b)" << endl;
}
protected:
private:
};
class Child :public Parent
{
public:
virtual void func(int i, int j)
{
cout << "C_func(a,b)" << endl;
{
public:
virtual void func()
{
cout << "P_func () " << endl;
}
virtual void func(int i, int j)
{
cout << "P_func(a,b)" << endl;
}
protected:
private:
};
class Child :public Parent
{
public:
virtual void func(int i, int j)
{
cout << "C_func(a,b)" << endl;
}
virtual void func(int i, int j, int l)
{
cout << "C_func(i,j,l)" << endl;
}
virtual void func(int i, int j, int l)
{
cout << "C_func(i,j,l)" << endl;
}
protected:
private:
};
void main()
{
//Parent p1;
Child c1;
c1.Parent::func();
//1 c++编译器 看到func的名字,因为子类中的func名字已经存在了
//名称覆盖,所以c++编译器不会去找父类中的func函数
//2 c++编译器只会在子类中查找func函数 ,找到了两个func
//一个是两个参数的,一个是三个参数的
//3 若想调用父类的func函数,只能加上域名Parent::
system("pause");
return ;
}
private:
};
void main()
{
//Parent p1;
Child c1;
c1.Parent::func();
//1 c++编译器 看到func的名字,因为子类中的func名字已经存在了
//名称覆盖,所以c++编译器不会去找父类中的func函数
//2 c++编译器只会在子类中查找func函数 ,找到了两个func
//一个是两个参数的,一个是三个参数的
//3 若想调用父类的func函数,只能加上域名Parent::
system("pause");
return ;
}