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; //定义员工ID
char m_Name[]; //定义员工姓名
char m_Depart[]; //定义所属部门
CEmployee() //定义默认构造函数
{
memset(m_Name,,); //初始化m_Name//注意这种用法,可以随意设置名字和部门
memset(m_Depart,,); //初始化m_Depart
}
void OutputName() //定义共有成员函数
{
cout <<"员工姓名"<<m_Name<<endl; //输出员工姓名
}
};
class COperator :public CEmployee //定义一个操作员类,从CEmployee类派生而来
{
public:
char m_Password[]; //定义密码
bool Login() //定义登录成员函数
{
if (strcmp(m_Name,"MR")== && //比较用户名。比较两个字符串,设这两个字符串为str1,str2,若str1==str2,则返回零;若str1>str2,则返回正数;若str1<str2,则返回负数。
strcmp(m_Password,"KJ")==) //比较密码
{
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 ;
}
运行结果:

程序中,CEmployee类是COperator类的基类,也就是父类。COperator类将继承CEmployee的所有非私有成员(private类成员不能被继承)。
用户在父类中派生子类时,可能存在一种情况,即在子类中定义了一个与父类同名的成员函数,此时称为子类隐藏了父类的成员函数。
C++入门经典-例8.1-类的继承的更多相关文章
- C++入门经典-例8.3-子类显示调用父类构造函数
1:当父类含有带参数的构造函数时,创建子类的时候会调用它吗?答案是通过显示方式才可以调用. 无论创建子类对象时调用的是那种子类构造函数,都会自动调用父类默认构造函数.若想使用父类带参数的构造函数,则需 ...
- C#入门经典第九章定义类-1
1.C#中使用class关键字来定义类 class MyClass { //代码部分 } 定义了类之后,就可以在项目中能访问该定义的其他位置对该类进行实例化.默认情况下,类的声明是内部的,即只有当前项 ...
- C++入门经典-例8.8-虚继承
1:以前讲到从CBird类和CFish类派生子类CWaterBird时,在CWaterBird类中将存在两个CAnimal类的复制.那么如何在派生CWaterBird类时使其只存在一个CAnimal基 ...
- C++入门经典-例8.7-多态,利用虚函数实现动态绑定
1:多态性是面向对象程序设计的一个重要特征,利用多态性可以设计和实现一个易于扩展的系统.在C++语言中,多态是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数,发出同样 ...
- 【JAVA零基础入门系列】Day13 Java类的继承与多态
继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...
- C++入门经典-例7.6-this指针,同一个类的不同对象数据
1:对于类的非静态成员,每个对象都有自己的一份拷贝,即每个对象都有自己的数据成员,不过成员函数却是每个对象共享的.那么调用共享的成员函数如何找到自己的数据成员呢?答案是通过类中隐藏的this指针. 2 ...
- C++入门经典-例9.3-类模板,简单类模板
1:使用template关键字不但可以定义函数模板,而且可以定义类模板.类模板代表一族类,它是用来描述通用数据类型或处理方法的机制,它使类中的一些数据成员和成员函数的参数或返回值可以取任意数据类型.类 ...
- C++入门经典-例8.9-抽象类,纯虚函数,创建纯虚函数
1:包含有纯虚函数的类称为抽象类,一个抽象类至少具有一个纯虚函数.抽象类只能作为基类派生出的新的子类,而不能在程序中被实例化(即不能说明抽象类的对象),但是可以使用指向抽象类的指针.在程序开发过程中并 ...
- C++入门经典-例7.5-对象的指针,函数指针调用类成员
1:指向相应对象的指针就是对象的指针,它的生明方法与其他类型一样,如下: 类名 *p; 类的指针可以调用它所指向对象的成员.形式如下: p->类成员; 2:代码如下: (1)cat.h #inc ...
随机推荐
- vue-cli3配置eslint
一.默认配置 以下是package.json文件中关于的eslint默认配置 "eslintConfig": { "root": true, "env ...
- java实现spark常用算子之Repartitions
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- Web框架理解
目录 1.web框架理解 2.http工作原理 3.通过函数实现浏览器和服务端通信案例 4.服务器程序和引用程序理解 5.jinja2渲染模板案例 6.Djan ...
- JavaWeb【七、JSP状态管理】
http协议无状态性 当提交请求,服务器返回响应.但当同一用户同一浏览器再次提交请求,服务器并不知道与刚才的请求是同一用户浏览器发起. 保存用户状态的两大机制 Session-保存在服务器端 Cook ...
- dart 函数练习
import 'dart:convert'; import 'dart:html'; void main() { _getIPAddress() { final url = 'https://http ...
- Delphi CreateFile函数
- 详解python中的描述符
描述符介绍 总所周知,python声明变量的时候,不需要指定类型.虽然现在有了注解,但这只是一个规范,在语法层面是无效的.比如: 这里我们定义了一个hello函数,我们要求name参数传入str类型的 ...
- python面向编程;类的绑定与非绑定方法、反射、内置方法
一.类的绑定与非绑定方法 ''' 类中定义函数分为了两大类: 1. 绑定方法 特殊之处: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法: 在类中定义函数没有被任何 ...
- 最简单webview跳转
String url = "http://www.qq.com" Uri uri=Uri.parse("http://www.baidu.com"); Inte ...
- Zookeeper01——zk的基本信息和安装
一.Zookeeper的基本信息 1.1背景 无论在前面,我们学习hdfs,还是学习redis集群,我们都会使用到一个zookeeper进行选举.这导致了Redis的产生. 我们知道,在先前我们使用Z ...