继承

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

语法:

class  子类类名:[继承方式]  父类类名
{ } ;

继承的方式有三种:

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

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

2.私有继承:

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

3.保护继承:

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

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

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

派生类构造函数语法:

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

构造调用顺序:

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

析构函数调用顺序

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

代码演示:

#include <iostream>
#include <string> using namespace std; class Man
{
public:
Man(string sn, int i):name(sn),age(i)
{
cout << "Man construct" << endl;
} ~Man()
{
cout << "Man destruct" << endl;
} void dis()
{
cout << "ame:" << name << endl;
cout << "age:" << age << endl;
}
private:
string name;
int age;
}; class Birthday
{
public:
Birthday(int y, int m):year(y), month(m)
{
cout << "Birthday construct " << endl;
} ~Birthday()
{
cout << "Birthday destruct " << endl;
}
private:
int year;
int month;
}; class Student:public Man
{
public:
Student(string name, int age, float fs):Man(name, age),bday(10, 10),_score(fs)
{
cout << "Student construct" << endl;
} ~Student()
{
cout << "Student destruct" << endl;
}
private:
float _score;
Birthday bday;
}; int main()
{
Student stu("wpf", 18, 100);
stu.dis();
}

运行结果:

同名隐藏

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


class Father
{
public:
void show()
{
cout << "Father show()" << endl;
} void show(int a)
{
cout << "Father show(int a)" << endl;
}
}; class Son : public Father
{
public:
void show()
{
cout << "Son show()" << endl;
}
}; int main()
{
Son son;
son.show(); //调用子类中的方法
son.show(1); //父类中的同名方法,void show(int a)被隐藏,无法调用
getchar();
}

多继承

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

多继承语法:

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

代码演示:

#include <iostream>
#include <string> using namespace std; //基类X
class X
{
public:
X(int a):i(a)
{
cout << "construct X" << endl;
} void displayX()
{
cout << "X:" << i << endl;
}
private:
int i;
}; //基类Y
class Y
{
public:
Y(int a):i(a)
{
cout << "construct Y" << endl;
} void displayY()
{
cout << "Y:" << i << endl;
}
private:
int i;
}; //派生类Z
class Z: public X, public Y
{
public:
Z(int a, int b, int c):X(a), Y(b), i(c)
{
cout << "construct Z" << endl;
} void displayZ()
{
cout << "Z:" << i << endl;
}
private:
int i;
}; int main()
{
Z z(1,2,3);
z.displayX();
z.displayY();
z.displayZ();
}

运行结果:

【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. 浅谈H5图片中object-fit的属性及含义/ 小程序image mode属性中scaleToFill,aspectFit,widthFix等类似

    我们在H5中对于图片的属性包含如下: object-fit属性有哪些值呢? object-fit: fill;  object-fit: contain;  object-fit: cover;  o ...

  2. learning scala akka actorySystem create and close

    package com.example import akka.actor.ActorSystem import scala.util.{Failure, Success} import scala. ...

  3. 洛谷 P4707 重返现世

    洛谷 P4707 重返现世 k-minimax容斥 有这一个式子:\(E(\max_k(S))=\sum_{T\subseteq S}(-1)^{|T|-k}C_{|T|-1}^{k-1}\min(T ...

  4. 【NOIP2015】真题回顾

    题目链接 神奇的幻方 按照题意模拟 信息传递 不难想到这是一个基环树的森林,找一个最小环就可以了 斗地主 毒瘤搜索题,时限不紧,但是要考虑全所有情况 需要注意的一些地方: 先枚举顺子.再枚举四带二.三 ...

  5. USACO 2009 Feb 股票市场 Stock Market

    USACO 2009 Feb 股票市场 Stock Market Description 尽管奶牛们天生谨慎,她们仍然在住房抵押信贷市场中大受打击,现在她们准备在股市 上碰碰运气.贝西开挂了,她知道S ...

  6. RESTFull开发风格

  7. 软件工程第二次作业——Java学习路线

    我的第二次软工作业 过去我对自己所学和想学都很迷茫,以至于学得总是一知半解,但现在我想主攻Java方向,并坚定不移地走下去(之后拓展其他方面就是以后的事情了).之所以想主攻Java方向是因为Java本 ...

  8. 为什么Map桶中个数超过8才转为红黑树

    这是笔者一个好友面试阿里时,被问及的一个问题,应该不少人看到这个问题都会一面懵逼.因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什么当链表长度为8的时候才做转换动作.笔者第一反应 ...

  9. 刷题记录:[CISCN2019 华北赛区 Day1 Web2]ikun

    目录 刷题记录:[CISCN2019 华北赛区 Day1 Web2]ikun 一.涉及知识点 1.薅羊毛逻辑漏洞 2.jwt-cookies伪造 Python反序列化 二.解题方法 刷题记录:[CIS ...

  10. 【定制开发】经纪人报备软件 全民经纪人系统 房产中介微信小程序分享家恒房通

    信真科技2019年最先扛鼎之作 - 全民经纪人软件系统 1.含有最基础的经纪人注册.客户报备系统功能: 2.可支持定制开发,针对房企售楼部.中介门店: 3.与微信端绑定使用,方便快捷,快速分享: 4. ...