重写重载隐藏

函数重载:发生在同一个函数中,参数列表或者返回值不同,同名函数

void Swap1(int* a, int* b);
void Swap2(float* a, float* b);
void Swap3(char* a, char* b);
void Swap4(double* a, double* b);

函数重写:发生在父子类间,同名函数,参数列表返回值完全相同。同时父类使用了virtual。此为多态。

//父类
class Person {
public:
	void virtual Buy_Ticket() {
		cout << "Person权限——全票购买" << endl;
	}
};
 
//子类1:
class Student :public Person {
public:
	void virtual Buy_Ticket() {
		cout << "Student权限——半价购买" << endl;
	}
};
 
//子类2:
class Soldier :public Person {
public:
	void virtual Buy_Ticket() {
		cout << "Soldier权限——优先购买" << endl;
	}
};

函数覆盖:父子类间的同名函数,不管参数列表以及返回值,子类中会将父类的同名函数覆盖。

class A {
public:
	void Sleep() {
		cout << "睡好觉" << endl;
	}
};
 
class B :public A {
public:
	void Sleep(int a) {
		a++;
		cout << "睡长觉" << endl;
	}
};
 
int main(){
 
    A a;
    B b;
    a.sleep();
    b.sleep();    //报错
    b.A::sleep();    //正确
    return 0;
}
Table of Contents