C++继承、多态、重写重载重定义

一、继承

(1)继承的概念

 

  在了解继承之前首先要知道[类]-class,而继承则是描述类与类之间关系的,通常代表了is a关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。

  当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类

 

(2)子类可以访问父类的属性和方法

 1 #include<iostream>
 2 using namespace std;
 3 
 4 /***********************继承的方法*/
 5 
 6 class parent
 7 {
 8 public:
 9     int a;
10 
11 protected:
12     int b;
13 
14 private:
15     int c;
16     
17 };
18 
19 class child:public parent 
20 {
21 public:
22     void print()
23     {
24         b = 0;
25         cout << "a:" << " " << a << endl;
26         cout << "b:" << " " << b << endl;
27 //        cout << "c:" << " " << c << endl;   错误
28     }
29 };
30 
31 
32 void main01()
33 {
34     /************一、、****************/
35     parent A;
36     child B;
37 
38     B.a = 0;
39 //    B.b = 0;  错误,,因为b成员在protected下
40 //    B.c = 0;  错误,,因为c成员在private下
41     B.print();
42     system("pause");
43 }

 注意protected与private的区别:

       从结果上看,protected继承方式和private方式是相同的,不过和private继承方式不同的一点是,当采用protected继承方式时,在派生类中,基类的公有成员和保护成员的使用权限将是protected,不再是private,也就是说,当再有一个类D继承C类时,D类可以继续在类内调用C类的公有成员和保护成员,但是在private继承方式下,这将是错误的。

   简单总结来说,public继承方式是最简单的,也是最常用的一种继承方式;private方式是使用最少的一种方式,因为权限太低;protected方式在实际使用过程中,常用于多重继承的情况。大家在实际使用过程中需要多注意和区分。
————————————————
引自:https://blog.csdn.net/casky237/article/details/54766881

二、多态

       多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。

  在我们想要选择我们想要的形态时,则会用到虚函数,也就是晚绑定。

  虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定

       下面用一个例子来解释下多态。

 1 #include<iostream>
 2 using namespace std;
 3 class zz
 4 {
 5 public:
 6     void printT()
 7     {
 8         cout << "我今天要" << endl;
 9     }
10 protected:
11 private:
12 };
13 
14 class food
15 {
16 public:
17 
18     virtual void print()  //虚函数
19     {
20         cout << "吃火锅!" << endl;
21     }
22 protected:
23 private:
24     int a;
25 };
26 
27 class food2:public food
28 {
29 public:
30 
31     void print()
32     {
33             cout << "吃串串!" << endl;
34     }
35 protected:
36 private:
37     int b;
38 };
39 
40 class food3:public food
41 {
42 public:
43     void print()
44     {
45             cout << "吃冒菜!" << endl;
46     }
47 protected:
48 private:
49     int c;
50 };
51 
52 
53 void select(food *j,zz *i)
54 {
55     i->printT();
56     j->print();
57 }
58 
59 void main()
60 {
61     int key;
62     food *address=NULL;
63     food f1;
64     food2 f2;
65     food3 f3;
66     zz haha; 
67 
68     cout << "我今天吃啥呢?" << endl;
69     cout << "请选择1-3" << endl;
70     cin >> key;
71     switch(key)
72     {
73         case 1:
74             address = &f1; //父类指针指向子类
75         case 2:
76             address = &f2;
77         case 3:
78             address = &f3;
79     }
80     select(address, &haha);
81     system("pause");
82 }

三、重写、重载、重定义

重载:在同一类中,函数名相同。

重写:在父类与子类当中,函数名相同。

重定义:在父类与子类当中,函数名相同,且不加virtual。

 

原文链接: https://www.cnblogs.com/kalzzz-thingg/p/13175840.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++继承、多态、重写重载重定义

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/357778

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午11:56
下一篇 2023年3月2日 上午11:56

相关推荐