【C++札记】类的继承
继承
面向对象的设计思想,类对数据做了封装,并可以加入访问权限,类的继承是面向对象思想的精髓。类的继承可以让新类从以有的类中获得已有的特征。原有类称为基类或父类,新类称为派生类或子类。
语法:
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++札记】类的继承的更多相关文章
- UML类图(上):类、继承和实现
面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- (转)Java:类与继承
原文地址: http://www.cnblogs.com/dolphin0520/p/3803432.html 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大 ...
- iBatis.net 类的继承extends和懒加载
<resultMaps> <resultMap id="FullResultMap" class="t_c_team_member_permission ...
- python 类定义 继承
0 前言 系统:win7 64bit IDE : python(x,y) 2.7.6.1 IDE集成的解释器:Python 2.7.6 (default, Nov 10 2013, 19:24:18) ...
- JS原型继承和类式继承
前言 一个多月前,卤煮读了一篇翻译过来的外国人写的技术博客.此君在博客中将js中的类(构造)继承和原型继承做了一些比较,并且得出了结论:建议诸位在开发是用原型继承.文中提到了各种原型继承的优点,详细的 ...
- Java编程里类的继承
今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...
- Java:类与继承
Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...
- swift_Class类的继承
//: Playground - noun: a place where people can play var str = "Hello, playground" //***** ...
随机推荐
- MySQL 为什么不用分区表(转载)
一分钟系列 潜在场景如何? 当MySQL单表的数据量过大时,数据库的访问速度会下降,“数据量大”问题的常见解决方案是“水平切分”. MySQL常见的水平切分方案有哪些? (1)分库分表: (2)分区表 ...
- Jmeter 正则表达式提取器详解(Regular Expression Exactor)
Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...
- java 练习(公司年销售额求和)
/*B:公司年销售额求和 某公司按照季度和月份统计的数据如下:单位(万元) 第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99 */ int ...
- CLR内部异常(上)
当我们提到CLR里的“异常”,要注意一个很重要的区别.有通过如C#的try/catch/finally暴露给应用程序,并由运行时提供机制全权实现的托管异常.也有运行时自己使用的异常.大部分运行时开发人 ...
- 洛谷 题解 P2731 【骑马修栅栏 Riding the Fences】
简单的开始 完美の开始 这里数组什么的用来干什么后面标注的清楚了 #include<iostream> #include<cstdio> #include<cmath&g ...
- 【cf比赛练习记录】Codeforces Round #579 (Div. 3)
思考之后再看题解,是与别人灵魂之间的沟通与碰撞 A. Circle of Students 题意 给出n个数,问它们向左或者向右是否都能成一个环.比如样例5是从1开始向左绕了一圈 [3, 2, 1, ...
- 配置docker阿里云加速器
1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通 ...
- mybatis or的用法
@Test public void test3(){ CaseSmallListExample caseSmallListExample = new CaseSmallListExample(); c ...
- 将爬取的实习僧网站数据传入HDFS
一.引言: 作为一名大三的学生,找实习对于我们而言是迫在眉睫的.实习作为迈入工作的第一步,它的重要性不言而喻,一份好的实习很大程度上决定了我们以后的职业规划. 那么,一份好的实习应该考量哪些因素呢? ...
- [BUAA软工]Alpha阶段事后分析
设想和目标 虽然我们是从零开始的一个自定义项目,但语音Coding助手从一开始的设计与目标就很明确:加入语音接口使其能在shell端实现命令语音实现以及编辑运行脚本,设计前端编辑器并将后端shell与 ...