C++入门经典-例8.1-类的继承
1:继承是面向对象的主要特征(此外还有封装和多态)之一,它使得一个类可以从现有类中派生,而不必重新定义一个新类。继承的实质就是用已有的数据类型创建新的数据类型,并保留已有数据类型的特点,以旧类为基础创建新类,新类包含了旧类的数据成员和成员函数,并且可以在新类中添加新的数据成员和成员函数。旧类被称为基类或父类,新类被称为派生类或子类。
2:类的继承形式如下:
class 派生类名称标识符:[继承方式] 基类名称标识符
{
[访问控制修饰符:]
[ 成员声明列表]
}
继承方式有3中派生类型,分别为共有型(public)、保护型(protected)和私有型(privated),访问控制修饰符也是public、protected、private三种类型,成员声明列表中包含类的成员变量及成员函数,是派生类新增的成员。“:”是一个运算符,表示基类和派生类之间的继承关系。
3:一个小例子。定义一个员工类,它包含员工ID、员工姓名、所属部门等信息。
class CEmployee//定义员工类
{
public:
int m_ID;//定义员工ID
char m_Name[128];//定义员工姓名
char m_Depart[128];//定义所属部门
}
定义一个操作员类,通常操作员属于公司的员工,它包含员工ID、员工姓名、所属部门等信息,此外还包含密码信息、登录方法等。
class COperator :public CEmployee//定义一个操作员类,从CEmployee类派生而来
{
public:
char m_Password[128];//定义密码
bool Login();
}
操作员类是从员工类派生的一个新类,新类中增加密码信息、登录方法等,员工ID、员工姓名等信息直接从员工类中继承得到。
3:例子代码如下:
// 8.1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; class CEmployee //定义员工类 { public:int m_ID; //定义员工IDchar m_Name[128]; //定义员工姓名char m_Depart[128]; //定义所属部门CEmployee() //定义默认构造函数 {memset(m_Name,0,128); //初始化m_Name//注意这种用法,可以随意设置名字和部门memset(m_Depart,0,128); //初始化m_Depart }void OutputName() //定义共有成员函数 {cout <<"员工姓名"<<m_Name<<endl; //输出员工姓名 } }; class COperator :public CEmployee //定义一个操作员类,从CEmployee类派生而来 { public:char m_Password[128]; //定义密码bool Login() //定义登录成员函数 {if (strcmp(m_Name,"MR")==0 && //比较用户名。比较两个字符串,设这两个字符串为str1,str2,若str1==str2,则返回零;若str1>str2,则返回正数;若str1<str2,则返回负数。strcmp(m_Password,"KJ")==0) //比较密码 {cout<<"登录成功!"<<endl; //输出信息return true; //设置返回值 }else{cout<<"登录失败!"<<endl; //输出信息return false; //设置返回值 }} }; int main(int argc, char* argv[]) {COperator optr; //定义一个COperator类对象strcpy(optr.m_Name,"MR"); //访问基类的m_Name成员strcpy(optr.m_Password,"KJ"); //访问m_Password成员optr.Login(); //调用COperator类的Login成员函数optr.OutputName(); //调用基类CEmployee的OutputName成员函数return 0; }
View Code
运行结果:
程序中,CEmployee类是COperator类的基类,也就是父类。COperator类将继承CEmployee的所有非私有成员(private类成员不能被继承)。
用户在父类中派生子类时,可能存在一种情况,即在子类中定义了一个与父类同名的成员函数,此时称为子类隐藏了父类的成员函数。
转载于:https://www.cnblogs.com/lovemi93/p/7565163.html
C++入门经典-例8.1-类的继承相关推荐
- C++入门经典-例8.3-子类显示调用父类构造函数
1:当父类含有带参数的构造函数时,创建子类的时候会调用它吗?答案是通过显示方式才可以调用. 无论创建子类对象时调用的是那种子类构造函数,都会自动调用父类默认构造函数.若想使用父类带参数的构造函数,则需 ...
- C++入门经典-例6.23-字符串数组赋值与string
C++入门经典-例6.23-字符串数组赋值与string 1:代码如下: // 6.23.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #i ...
- C++入门经典-例2.14-使用移位运算
C++入门经典-例2.14-使用移位运算 1:代码如下: // 2.14.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include & ...
- [Java2 入门经典]第6章 类的扩展与继承
6.1 6.2 类的继承 在派生类中包含其基类的成员,以便它们在派生类中可以被访问的过程称为类的继承. 一个基类的继承成员可以在其派生类中被访问.如果一个基类的成员不能在其派生类中被访问,那么它就不是 ...
- C++入门经典-例9.4-默认模板参数
1:默认模板参数就是在类模板定义时设置类型形式参数表中的一个类型参数的默认值,该默认值是一个数据类型.有了默认的数据类型参数后,在定义模板的新类型时就可以不进行指定.代码如下: // 9.4.cpp ...
- C++入门经典-例7.8-const对象,标准尺寸
1:当建立一个对象之后,如果不希望它的任何数据发生改变,可以将其直接声明为const对象,例如: const 类名 对象名 const对象必须初始化.我们可以调用它的数据和函数,但是不可以对他们进行修 ...
- C++入门经典-例6.14-通过指针连接两个字符数组
1:字符数组是一个一维数组,引用字符数组的指针为字符指针,字符指针就是指向字符型内存空间的指针变量. char *p; char *string="www.mingri.book" ...
- C++入门经典-例4.7-变量的作用域
1:代码如下: // 4.7.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- C++入门经典-例4.1-声明、定义和使用函数
1:代码如下: // 4.1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
最新文章
- 必看,10篇定义计算机视觉未来的论文
- linux配置jdk环境
- 【数字信号处理】傅里叶变换性质 ( 傅里叶变换线性性质 | 傅里叶变换时移性质 )
- “苏木”边上的小牛犊
- 基于 frida 实现的逆向工具包 hooker
- java为学生s1的age属性_求解java程序,题目如下
- vb与数据库(二)之迟到的学生信息管理系统总结
- mysql group by having 子句
- 云顶之弈机器人法爆_云顶之弈法爆流斗法阵容详解
- 网易2018校招内推编程题 小易喜欢的数列
- ios vue 添加本地音乐_vue怎么添加自己的音乐
- 软件设计文档编写概述
- 让CI框架支持traits新特性
- C++ 后退前进资源浏览器实现方式,附代码
- Chrome 鼠标左击右击无效解决办法
- 教你如何管理Linux进程和任务
- [七夕节]——一款基于canvas绘制五颜六色线条合成一个爱心发光动画特效
- day02 Nacos集群配置、Feign远程调用和统一网关Gateway
- java 方法实现数学黑洞
- Cisco路由器忘记密码