继承

面向对象的设计思想,类对数据做了封装,并可以加入访问权限,类的继承是面向对象思想的精髓。类的继承可以让新类从以有的类中获得已有的特征。原有类称为基类或父类,新类称为派生类或子类。

语法:

  1. class  子类类名:[继承方式]  父类类名
  2. {
  3. } ;

继承的方式有三种:

1.共有继承:(使用最广泛)

在派生类中原来的公有成员,保护成员身份不变。原私有成员仍不可访问。

2.私有继承:

在派生类中原来的公有成员,保护成员都称为了保护成员。原私有成员仍不可访问。

3.保护继承:

在派生类中原来的公有成员,保护成员都称为了私有成员。原私有成员仍不可访问。

派生类的构造函数和析构函数

派生类继承基类过程中,基类的构造函数和析构是不能继承下来的。所以,派生类必须设置自己的构造函数和析构函数。

派生类构造函数语法:

  1. 派生类名::派生类名(参数):基类名(参数),派生类新成员()
  2. {
  3. }

构造调用顺序:

基类构造--->派生类构造

析构函数调用顺序

派生类析构--->基类析构

代码演示:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. class Man
  5. {
  6. public:
  7. Man(string sn, int i):name(sn),age(i)
  8. {
  9. cout << "Man construct" << endl;
  10. }
  11. ~Man()
  12. {
  13. cout << "Man destruct" << endl;
  14. }
  15. void dis()
  16. {
  17. cout << "ame:" << name << endl;
  18. cout << "age:" << age << endl;
  19. }
  20. private:
  21. string name;
  22. int age;
  23. };
  24. class Birthday
  25. {
  26. public:
  27. Birthday(int y, int m):year(y), month(m)
  28. {
  29. cout << "Birthday construct " << endl;
  30. }
  31. ~Birthday()
  32. {
  33. cout << "Birthday destruct " << endl;
  34. }
  35. private:
  36. int year;
  37. int month;
  38. };
  39. class Student:public Man
  40. {
  41. public:
  42. Student(string name, int age, float fs):Man(name, age),bday(10, 10),_score(fs)
  43. {
  44. cout << "Student construct" << endl;
  45. }
  46. ~Student()
  47. {
  48. cout << "Student destruct" << endl;
  49. }
  50. private:
  51. float _score;
  52. Birthday bday;
  53. };
  54. int main()
  55. {
  56. Student stu("wpf", 18, 100);
  57. stu.dis();
  58. }

运行结果:

同名隐藏

子类中定义了与父类同名的方法(不管参数),子类的该方法将会隐藏掉所有的父类的同名方法;


  1. class Father
  2. {
  3. public:
  4. void show()
  5. {
  6. cout << "Father show()" << endl;
  7. }
  8. void show(int a)
  9. {
  10. cout << "Father show(int a)" << endl;
  11. }
  12. };
  13. class Son : public Father
  14. {
  15. public:
  16. void show()
  17. {
  18. cout << "Son show()" << endl;
  19. }
  20. };
  21. int main()
  22. {
  23. Son son;
  24. son.show(); //调用子类中的方法
  25. son.show(1); //父类中的同名方法,void show(int a)被隐藏,无法调用
  26. getchar();
  27. }

多继承

多继承是的新建的获得多个类(>=2)中获得已有的特征, 并非所有面向对象的语言都有这种语法,如Java,C#取消了多继承,多继承可能引起多种问题,如二义性等。

多继承语法:

  1. 派生类名:public 基类名1public 基类名2
  2. {
  3. };

代码演示:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. //基类X
  5. class X
  6. {
  7. public:
  8. X(int a):i(a)
  9. {
  10. cout << "construct X" << endl;
  11. }
  12. void displayX()
  13. {
  14. cout << "X:" << i << endl;
  15. }
  16. private:
  17. int i;
  18. };
  19. //基类Y
  20. class Y
  21. {
  22. public:
  23. Y(int a):i(a)
  24. {
  25. cout << "construct Y" << endl;
  26. }
  27. void displayY()
  28. {
  29. cout << "Y:" << i << endl;
  30. }
  31. private:
  32. int i;
  33. };
  34. //派生类Z
  35. class Z: public X, public Y
  36. {
  37. public:
  38. Z(int a, int b, int c):X(a), Y(b), i(c)
  39. {
  40. cout << "construct Z" << endl;
  41. }
  42. void displayZ()
  43. {
  44. cout << "Z:" << i << endl;
  45. }
  46. private:
  47. int i;
  48. };
  49. int main()
  50. {
  51. Z z(1,2,3);
  52. z.displayX();
  53. z.displayY();
  54. z.displayZ();
  55. }

运行结果:

【C++札记】类的继承的更多相关文章

  1. UML类图(上):类、继承和实现

    面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...

  2. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  3. (转)Java:类与继承

    原文地址: http://www.cnblogs.com/dolphin0520/p/3803432.html 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大 ...

  4. iBatis.net 类的继承extends和懒加载

    <resultMaps> <resultMap id="FullResultMap" class="t_c_team_member_permission ...

  5. python 类定义 继承

    0 前言 系统:win7 64bit IDE : python(x,y) 2.7.6.1 IDE集成的解释器:Python 2.7.6 (default, Nov 10 2013, 19:24:18) ...

  6. JS原型继承和类式继承

    前言 一个多月前,卤煮读了一篇翻译过来的外国人写的技术博客.此君在博客中将js中的类(构造)继承和原型继承做了一些比较,并且得出了结论:建议诸位在开发是用原型继承.文中提到了各种原型继承的优点,详细的 ...

  7. Java编程里类的继承

    今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...

  8. Java:类与继承

    Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...

  9. swift_Class类的继承

    //: Playground - noun: a place where people can play var str = "Hello, playground" //***** ...

随机推荐

  1. LeetCode 931. Minimum Falling Path Sum

    原题链接在这里:https://leetcode.com/problems/minimum-falling-path-sum/ 题目: Given a square array of integers ...

  2. Shell的语法

    Shell的语法: 变量:字符串.数字.环境和参数: 条件:shell中的布尔值: 程序控制:if.elif.for.while.until.case: 命令列表: 函数: Shell内置命令: 获取 ...

  3. 将lol人物模型导入到Unity3d

      接下来我打算将提取出来的lol人物模型导入到Unity3D中,这样会更加好玩!(不知道如何提取lol人物模型的话请看该链接)   首先我们已经把dae文件导入到c4d中了,可以看到这是一只吹笛子的 ...

  4. 第06组 Alpha冲刺(4/4)

    队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11913386.html 作业博客 :https://edu.cnblogs.com/campus/f ...

  5. 去掉 vue 的 "You are running Vue in development mode" 提示

    去掉 vue 的 "You are running Vue in development mode" 提示 在项目的 main.js 中已经配置了 Vue.config.produ ...

  6. GIT生成SSH-KEY公钥放到服务器免密登录

    在使用git时老是碰到在push的时候提示没有权限的问题,那么现在咱们就来创建ssh-key来免密登录.我们来看看如何配置服务器端的 SSH 访问. 本例中,我们将使用 authorized_keys ...

  7. win10如何删除自己设置过的头像

    把      %appdata%\Microsoft\Windows\AccountPictures  输入到地址栏  然后删除你想删除的照片即可

  8. Research Guide for Video Frame Interpolation with Deep Learning

    Research Guide for Video Frame Interpolation with Deep Learning This blog is from: https://heartbeat ...

  9. TTA 方法

    可将准确率提高若干个百分点,它就是测试时增强(test time augmentation, TTA). 这里会为原始图像造出多个不同版本,包括不同区域裁剪和更改缩放程度等,并将它们输入到模型中: 然 ...

  10. [Java复习] Spring Cloud - Netflix

    Spring Cloud Netflix常用组件 服务注册与发现:Eureka 服务负载均衡:Ribbon 服务声明式客户端:Feign 服务熔断:Hystrix 服务网关: Zuul Eureka: ...