摘要:本文主要向大家介绍了 C/C++知识点之【C++】三大概念要分清--重载,隐藏(重定义,覆盖(重写),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了 C/C++知识点之【C++】三大概念要分清--重载,隐藏(重定义,覆盖(重写),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
重载
• 概念:在同一个作用域内;函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类型可相同也可不同;这种情况叫做c++的重载!
注意:c语言没有函数重载的机制;
• 举例代码:
1 #include
2 using namespace std;
3
4 int Add(int a,int b)
5 {
6 return a+b;
7 }
8
9 float Add(float a,float b)
10 {
11 return a+b;
12 }
13
14 int main()
15 {
16 cout<<Add(4,5)<<endl; // 调用 int Add(int a,int b)
17 cout<<Add(2.5f,3.7f)<<endl; // 调用 float Add(float a,float b)
18 return 0;
19 }
此时,两个函数Add();在同一作用域,函数名相同都是Add,参数类型不同;就构成了c++中的函数重载;
• c++函数重载达到的效果:调用函数名相同的函数,会根据实参的类型和实参顺序以及实参个数选择相应的函数;
• c++函数重载是一种静态多态(又叫做静态联编,静态绑定,静态决议)
覆盖(又叫重写)
• 覆盖(重写)的前提条件:父类函数为虚函数;
• 覆盖(重写)的概念:当在子类中定义了一个与父类完全相同的虚函数时,则称子类的这个函数重写(也称覆盖)了父类的这个虚函数。
• 什么是在子类中定义了一个与父类完全相同的虚函数:
有两种情况:
1. 就是说子类中的虚函数和父类中的虚函数,函数名,参数个数,参数类型,返回值类型都相同;这种情况下子类的这个虚函数重写的父类中的虚函数,构成了重写;
2. 协变—是说子类中的虚函数和父类中的虚函数,函数名,参数个数,参数类型都相同,只是返回值类型不同;父类的虚函数返回父类的指针或者引用,子类虚函数返回子类的指针或者引用;这种情况下子类的这个虚函数也重写了父类中的虚函数,也构成了重写;——我们把这种特殊的情况叫做协变
【注意】:在基类中定义了一个与派生类虚函数完全相同的函数,那么这个派生类的函数就是重写了基类的虚函数,此时这个派生类的函数就是虚函数,如果不显示的加上virtual修饰,编译器也会默认为虚函数;
1 #include
2 using namespace std;
3
4 class Person
5 {
6 public:
7 virtual void BuyTickets()
8 {
9 cout << " 买票-全票" << endl;
10 }
11 protected:
12 string _name; // 姓名
13 };
14
15 class Student : public Person
16 {
17 public:
18 void BuyTickets()
19 {
20 cout << " 买票-半价" << endl;
21 }
22 protected:
23 int _num; //学号
24 };
25
26 void Fun(Person* p)
27 {
28 p->BuyTickets();
29 }
30
31 void Fun(Person &p)
32 {
33 p.BuyTickets();
34 }
35
36 void Test()
37 {
38 Person p;
39 Student s;
40 Fun(p);
41 Fun(s);
42
43 Fun(&p);
44 Fun(&s);
45 }
46
47 int main()
48 {
49 Test();
50 system("pause");
51 return 0;
52 }
输出结果:
举例2:
1 #include
2 using namespace std;
3 class Person
4 {
5 public:
6 virtual Person& BuyTickets()//基类虚函数
7 {
8 cout << "成人买票-全票" << endl;
9 return *this;
10 }
11 public:
12 string _name; // 姓名
13 };
14
15 class Student : public Person
16 {
17 public:
18 virtual Student& BuyTickets()//派生类虚函数
19 {
20 cout << "学生买票-半票" << endl;
21 return *this;
22 }
23 public:
24 int _num; //学号
25 };
26
27 void Fun(Person* p)
28 {
29 p->BuyTickets();
30 }
31
32 void Fun(Person &p)
33 {
34 p.BuyTickets();
35 }
36 void Test()
37 {
38 Person p;
39 Student s;
40 Fun(p);
41 Fun(s);
42
43 Fun(&p);
44 Fun(&s);
45 }
46 int main()
47 {
48 Test();
49 system("pause");
50 return 0;
51 }
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号