C++学习笔记5:继承、多态基础

2023-11-12

组合
继承
继承与组合
构造与析构顺序
派生类重载基类函数的访问
多态性&虚函数
纯虚函数和抽象基类
多重继承
派生类成员的标识与访问

组合、继承与多态性:

面向对象涉及的重要目的之一就是代码重用,多态性可以以常规方式书写程序来访问多种现有的且专门化了的相关类。继承和多态是面向对象程序设计方法的最主要的特征。
继承可以将一群相关的类组织起来,并共享一些相同数据和操作行为;
多态使得设计者在这些类上编程时,可以如同操作一个单一体,而非相互独立的类,且给设计者更多灵活性来加入或删除类的一些属性或方法

组合

对于比较简单的类,其数据成员可能都是基本数据类型,但是对于某些复杂的类来说,它的某些数据成员可能又是另一些类类型,这就形成了类的组合。实际上,C一直在使用组合,如C中的结构体就可以看成是不同类型数据的组合,类也是不同类型数据及操作的组合,只不过是基本的数据类型的组合。

#include <iostream>
class Myclass
{
	enum{NUM = 50};
	char cName[20];
	int iNum;
	Student stulist[Num];
	public:
	const char* Getclassname();
	const char* Getstuname(int ino);
};
 
Myclass::Myclass()
{
	iNum = 0;
}
 
inline const char* Myclass::Getclassname()
{
	return cName;
}
 
const char* Myclass::GetStuName(int iNo)
{
	for(int i = 0; i < iNum; i++)
	{
		if(stulist[i].Getno() == iNo)
			return stulist[i].GetName();
	}
	return NULL;
}

继承

类的继承就是新类从已有类那里获得已有的属性和行为,或者说是基类派生了具有基类特征又具有新特征的派生类。继承是软件可重用型的一种形式,新类通过继承从现有类中得到其属性和行为,并对其进行覆盖或改写,产生新类所需要的功能。同样,新类也可以派生出更新的类。创建新类,但不是从头创建,可以从其他人已经创建并调试过的类上开始创建,创建关键是使用类,而不是更改已存在的代码。

类继承语法:

class 子类名:public/private/protected 父类名
{

};

子类具有父类的所有属性和行为,且可以增加新的行为和属性
C++提供了三种继承的方式:公有继承public、私有继承private、保护继承protected

公有继承

1)基类的private、public、protected成员的访问属性在派生类中保持不变
2)派生类中继承的成员函数可以直接访问基类中的所有成员,派生类中新增的成员函数只能访问基类的public和protected成员,不能访问基类的private成员
3)通过派生类的对象只能访问基类的public成员
例子

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++学习笔记5:继承、多态基础 的相关文章

  • 金特 + XNA (C#)

    是否可以使用jint http jint codeplex com操作使用 XNA C 创建的 3D 环境 并向该环境添加功能 再次使用 jint 作为 Jint 的贡献者 我会推荐你Jint http jint codeplex com
  • 编写此代码片段的有效方法是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 更有效和 或更短地重写此代码以节省字节并显得不那么冗长的方法 if N 2 0 N 6 N 8 N 10 N 12 N 14 N 16 N
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • 使用 C# 中的 Google 地图 API 和 SSIS 包获取行驶距离

    更新 找到了谷歌距离矩阵并尝试相应地修改我的代码 我在这里收到无效参数错误 return new GeoLocation dstnc uri ToString catch return new GeoLocation 0 0 https 基
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • 将错误代码映射到 C++ 中的字符串

    将错误代码从枚举映射到字符串的更有效方法是什么 在 C 中 例如 现在我正在做这样的事情 std string ErrorCodeToString enum errorCode switch errorCode case ERROR ONE
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • printf或iostream如何指定点后的最大位数

    字符串采用什么格式printf or iomanip我应该使用 iostream 中的运算符以以下格式打印浮点数 125 0 gt 125 125 1 gt 125 1 125 12312 gt 125 12 1 12345 gt 1 12
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section

随机推荐

  • matplotlib绘制3d图形出现空白,解决办法

    如果出现如下图空白 或者出现下面报错MatplotlibDeprecationWarning Axes3D fig adding itself to the figure is deprecated since 3 4 Pass the k
  • 三大框架 之 Hibernate查询(一对多、多对多、查询关系)

    目录 一对多 表之间关系 表之间关系建表原则 一对多关系配置 建立表 建立ORM 添加配置文件 在hibernate cfg xml中的标签里 添加核心配置文件 引入工具类 编写测试类 级联操作 什么是级联 级联分类 级联是有方向性 级联保
  • openfeign使用报错:No Feign Client for loadBalancing defined.

    错误描述 nested exception is java lang IllegalStateException No Feign Client for loadBalancing defined Did you forget to inc
  • DDR中的ODT功能详解及波形对比

    ODT on die termination 即为片内端接 就是将端接电阻放在了芯片内部 这个功能只有在DDR2以上的数据信号才有 而有了ODT功能 原本需要在PCB板上加串联电阻的数据信号就不需要再额外添加端接了 只需要芯片内部打开ODT
  • 敌兵布阵

    http acm hdu edu cn showproblem php pid 1166 Problem Description C国的死对头A国这段时间正在进行军事演习 所以C国间谍头子Derek和他手下Tidy又开始忙乎了 A国在海岸线
  • java将两个有序链表合并成有序链表

    利用递归法将两有序链表合并成链表 且合并后的链表仍然有序 比较链表1和链表2的第一个结点数据 如果head1 data
  • DDoS攻击重大历史事件

    历史上有名ddos的攻击事件很多 涉及行业包括政治 经济 军事等各个行业 下面列举一下2016年比较有名的几起DDOS事件 1 暴雪DDoS攻击 LizardSquad组织对暴雪公司战网服务器发起DDoS攻击 包括 星际争霸2 魔兽世界 暗
  • ARM 异常介绍

    一 中断概念 CPU 在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程 硬件引起的中断不可预测 随机性 软中断 事先在程序中安排特殊指令 CPU 执行到该类指令时 转去执行相应的一段预先安排好的程序 然后再返回来执行原来的
  • 用三元操作符替代if-else以降低CPU分支预测惩罚实现Unity内函数13倍提速

    测试对象 1 C Unity脚本 2 C DLL mcs build的动态链接库再导入Unity 3 C Native Code LLVM编译后导入Unity 被测试函数源码 两个随机数数组进行大小比较 一个数组保存大数 另一个保存小数 C
  • 动态IP代理是什么?一文看懂动态代理IP

    一 什么是动态IP代理 动态IP代理是一种代理服务 而动态IP是由ISP动态分配给用户的IP地址 这些IP地址会周期性地更改 每次链接互联网时 用户会被分配一个新的IP地址 因而也称为 轮换IP IP地址轮换是一个过程 您的IP 地址 网络
  • Unity教程:GUI 界面开发

    UI概述 UI永远是显示在屏幕的最前面上 不受变形 碰撞 光照的影响 GUI概述 GUI是Graphical User Interface的缩写 Unity的图形界面系统能容易和快速创建出各种交互界面 与传统的方法 创建GUI对象 标出位置
  • 神经网络之VGG

    目录 1 VGG的简单介绍 1 2结构图 3 参考代码 VGGNet 16 架构 完整指南 卡格尔 kaggle com 1 VGG的简单介绍 经典卷积神经网络的基本组成部分是下面的这个序列 带填充以保持分辨率的卷积层 非线性激活函数 如R
  • C# WinForm扩展控件TextBox底部下划线展示

    在winform项目中 新建一个类 TextBoxLine 然后编译项目 打开工具箱就可以看到控件了 代码 using System using System Collections Generic using System Compone
  • Midjourney 动画全参数提示(为 Niji V5 更新)使用 Midjourney 生成动画有两种方式:使用 Niji 模式或使用标准 Midjourney 模型,参数教程(第一节)

    Niji V5 Niji 模式的最新版本 是 Midjourney 的专门针对动画的模型 它建立在与标准 Midjourney 模型完全不同的架构上 更擅长生成具名动画角色 Niji V4 于 2023 年 12 月发布 Niji V5 于
  • gitee将本地项目更新到远程仓库指定的分支上

    1 首先看自己在哪个分支 git branch a 2 然后将代码放到暂存区 git add 3 然后git commit m 提交 到本地库 git commit m 问卷管理 4 然后git pull origin jieer 5 gi
  • shell调试技术

    1 shell调试选项 语法 sh n x v Sctipt sh 参数说明 n 检查shell脚本是否有语法错误 只读取shell脚本 但不执行 x 提供跟踪执行信息 将执行的每一条命令 每一个变量的值和结果一次打印出来 v 一边执行脚本
  • 什么是死区时间

    死区时间是PWM输出时 为了使H桥或半H桥的上下管不会因为开关的关断延迟问题发生同时导通而设置的一个保护时段 通常也指pwm响应时间 由于IGBT 绝缘栅极型功率管 等功率器件都存在一定的结电容 所以会造成器件导通关断的延迟现象 一般在设计
  • 【华为机试真题 Python】@分割可用字符集

    前言 本专栏针对华为OD机试题目进行了详细的分析与解答 并包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun0903
  • 入门嵌入式,开发板应该怎么选?

    作者 学益得智能硬件 入门嵌入式 开发板应该怎么选择 网上推荐的太多 不知道该如何选择 选择开发板 无非考虑三点因素 配套学习资源 源码 视频 书籍 性能 能不能运行学习用到的程序 性价比 价格是不是超出了预算 下面给大家推荐几款主流的能跑
  • C++学习笔记5:继承、多态基础

    组合 继承 继承与组合 构造与析构顺序 派生类重载基类函数的访问 多态性 虚函数 纯虚函数和抽象基类 多重继承 派生类成员的标识与访问 组合 继承与多态性 面向对象涉及的重要目的之一就是代码重用 多态性可以以常规方式书写程序来访问多种现有的