苏州建站网站模板,wordpress菜单绑定模板,vue 做的网站,58同城网站建设案例目录
1.函数重载 1.1定义 1.2函数重载的规则#xff1a; 1.3函数重载的作用#xff1a;
2.函数重写#xff1a; 2.1定义 2.2例子#xff1a;
3.函数隐藏 3.1定义 3.2举个例子#xff1a; 1.函数重载 1.1定义 我们在学类和对象的封装特性时学过一个词叫重载#xff0c… 目录
1.函数重载 1.1定义 1.2函数重载的规则 1.3函数重载的作用
2.函数重写 2.1定义 2.2例子
3.函数隐藏 3.1定义 3.2举个例子 1.函数重载 1.1定义 我们在学类和对象的封装特性时学过一个词叫重载函数重载就是函数重载是一种特殊情况C允许在同一作用域中声明几个类似的同名函数这些同名函数的形参列表参数个数类型顺序必须不同常用来处理实现功能类似数据类型不同的问题。
案例如下
void Swap1(int* a, int* b);
void Swap2(float* a, float* b);
void Swap3(char* a, char* b);
void Swap4(double* a, double* b); 这四个Swap函数都是函数重载同名但形参列表不同形成的函数。 1.2函数重载的规则 1.函数名称必须相同。 2.参数列表必须不同个数不同、类型不同、参数排列顺序不同等。 3.函数的返回类型可以相同也可以不相同。 4.仅仅返回类型不同不足以成为函数的重载。 1.3函数重载的作用 在同一个作用域内用同一个函数名命名一组功能相似的函数这样做减少了函数名的数量避免了名字空间的污染对于程序的可读性有很大的好处。 2.函数重写 2.1定义 重写也叫覆盖重写表明在继承了父类的子类中编写了一个与父类的函数名称函数参数函数返回值完全相同的一个函数子类可以用此方法以实现不同的功能进而实现多态的特性。所以总结出函数重写一般用于“子类在继承父类时重写覆盖父类中的方法”。函数特征完全相同但是具体实现可以不同——即外面的轮廓长相必须完全相同里面的性格习惯可以不同。 2.2例子
//父类
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;}
};在上方代码中两个子类的Buy_Ticket函数就形成了对父类的Buy_Ticket函数的重写。子类写的这个函数达到了与父类的函数名、参数、返回值完全相同的函数。 3.函数隐藏 3.1定义 在学习继承的过程中我们又学到了一个新词汇隐藏也可以叫重定义。 隐藏就是说隐藏是指子类的函数屏蔽了与其同名的父类函数。如下 两个函数分别在父类和子类的作用域中函数名相同 若两个父类和子类的同名函数不构成重写那么一定构成隐藏重定义 3.2举个例子
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;
} 在上图代码中类A和类B都有一个相同名称的Sleep函数由于类B是公有继承类A那么类B中会有从类A继承过来的无参的Sleep()函数而B类对象b想要调用无参的Sleep()函数是会报编译错误的因为子类B会将继承过来的成员函数进行隐藏那么编译器通过执行对象b想调用无参Sleep()函数发现子类中没有无参Sleep()函数报错 子类偷偷藏起来了所以编译器找不到 而想要调用隐藏函数需要指定作用域 b.A::sleep();