c++学习记录(三)

c++面向对象记录(二)

1.继承

继承是面向对象程序设计的一个重要概念。继承指依据另一个类来定义一个类,就好像子女继承父母的基因。运用继承的方法,我们就不需要重新编写数据成员。已有的类称为基类,新建的类称为派生类或者子类。

(1)子类定义

定义一个子类,使用格式:

\\class 子类名: 访问修饰符 基类名

(2)访问控制和继承

子类可以访问基类中的非私有成员,不可访问私有成员。子类继承了除下列情况外基类的所有方法:
·基类的构造方法、析构方法和拷贝构造函数
·基类的重载运算符
·基类的友元函数

(3)继承类型

使用不同类型的继承是,有以下规则:
·public继承:基类public、protected、private成员的访问属性在子类中分别变为:public、protected、private
·protected继承:基类public、protected、private成员的访问属性在子类中分别变为:protected、protected、private
·private继承:基类public、protected、private成员的访问属性在子类中分别变为:private、private、private

(4)多继承

类可以从多个类中继承,格式如下:

\\class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>
{
    body
};

2.重载运算符和重载函数

C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。例如:在类中定义三个print函数,分别输出整型、浮点型、字符型数据,程序会判断你输入的数据类型进行合适的函数匹配,这个过程称为重载决策。
重载运算符由关键字operator和运算符符号构成,格式如下:

\\classname operator运算符(参数):

注意成员访问运算符,成员指针访问运算符,域运算符,长度运算符,条件运算符,预处理运算符不可重载

3.多态

多态使用于有层次结构并且有继承关系的类,指在调用成员函数时,根据调用的对象类型来执行不同的函数。

(1)虚函数

静态多态(静态链接或早绑定):函数调用在程序执行前已准备好。通过静态多态后,如果子类中不进行操作,则会返回基类中的设置。如果想根据子类而进行改变,则要定义虚函数(动态链接或后期绑定)。
虚函数以关键字virtual定义

(2)纯虚函数

如果你想在子类中重新定义基类中的函数,而基类中的函数又不能有意义,则可以使用纯虚函数,格式:

\\virtual 数据类型 function()=0;

4.数据抽象

数据抽象是一种依赖于接口和实现分离的编程(设计)技术,是指只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。我的理解是能给用户看的部分使用public定义,其他部分则使用protected或者private定义。

数据抽象的好处

(1)类的内部受到保护
(2)类实现可能随着时间的推移而发生变化,以便应对不断变化的需求

5.数据封装

数据封装是一种把数据和操作数据的函数捆绑在一起的机制。c++通过创建类来进行数据封装。数据封装使用到访问修饰符public、protected和private。一般为了保证良好的封装性,使用private设置私有成员进行访问限制。

6.抽象类

c++接口使用抽象类来实现,抽象类中至少有一个纯虚函数。设计抽象类是为了给其他类提供一个可继承的适当基类,但抽象类不能被用于实例化对象,只能作为接口。可用于实例化对象的类被称为具体类。

总结:c++面向对象也算了解完了基础知识,面向对象有封装、抽象、继承、多态四大特点,使用方法多样,希望我能运用好它们做有意思的项目。

原文地址:https://www.cnblogs.com/trainking-star/p/12242924.html

时间: 2024-10-08 23:04:09

c++学习记录(三)的相关文章

Windows API 编程学习记录&lt;三&gt;

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,

Spring Boot学习记录(三)--整合Mybatis

Spring Boot学习记录(三)–整合Mybatis 标签(空格分隔): spring-boot 控制器,视图解析器前面两篇都已弄好,这一篇学习持久层框架整合. 1.数据源配置 数据源使用druid,maven引入相关依赖,包括spring-jdbc依赖,mysql依赖 1.转换问题 配置的过程要学会为什么这样配置,而不是只学会了配置.这里我们可以和以前的配置方式对比: 以前版本 <!--配置数据库连接池Druid--> <bean id="dataSource"

Mybatis学习记录(三)--Mybatis配置文件详解

关于mybatis的配置文件,主要有两个,一个是SqlMapperConfig.xml文件一个是mapper.xml文件,分别对这两个进行深入全面学习. 一.SqlMapperConfig.xml文件 1.标签概况 在SqlMapperConfig.xml中主要有以下标签,其中环境集合environments和spring整合后废除不用.objectFactory和plugins不经常使用. properties(属性) settings(全局配置参数) typeAliases(类型别名) ty

产品需求文档的学习记录(三)

我们通过思维导图将想法进行了结构化梳理,接下来我们就需要进行方案的可行性推演,验证产品功能是否可行,预估项目要花多少人力物力,因此我们就要通过原型设计进行相关需求的论证.一开始就撰写PRD文档,我们很难对产品进行各方面的评估,也无法得知方案的可行性,并且无法直观细致的考虑产品. 原型设计是帮助我们更细致的思考,并做各项需求的评估,同时也是将自己脑海里的想法进行输出,通过原型设计后,我们就可以进行产品宣讲了.相对于之前抽象的文字描述,原型则更加清晰产品的需求,设计和技术人员或者老板也能够更加直观的

UNP学习记录---三次握手和四次挥手

三次握手: 1.服务器被动接受客户的连接请求,调用socket,bind,listen来完成,并且阻塞在accpet. 2.客户调用connect发起主动打开,客户发送一个SYN 3.服务器收到SYN,回复一个ACK和SYN. 4.客户回复一个ACK确认. 四次挥手: 1.客户调用close主动关闭,发送一个FIN. 2.服务器回复一个ACK 3.服务器调用close回复一个FIN 4.客户回复一个ACK 主动发起断连的那端会在最后保持一个TIME_WIAT状态. TIME_WAIT存在的理由:

ES6深入学习记录(三)编程风格

今天学习阮一峰ES6编程风格,其中探讨了如何将ES6的新语法,运用到编码实践之中,与传统的JavaScript语法结合在一起,写出合理的.易于阅读和维护的代码. 1.块级作用域 (1)let 取代 var ES6 提出了两个新的声明变量的命令: let 和 const.其中,let 完全可以取代 var,因为两者语义相同,而且 let 没有副作用. 上面代码如果用 var 替代 let,实际上就声明了两个全局变量,这显然不是本意.变量应该只在其声明的代码块内有效,var 命令做不到这一点. va

python学习记录三

一.集合: list_1 = [1,4,5,7,3,6,7,9] list_1 = set(list_1) list_2 = set([2,6,0,66,22,8,4]) #交集 list_1.intersection(list_2) #list_1 & list_2 #并集 list_1.union(list_2) #list_1 | list_2 #差集 list_1.difference(list_2) #list_1 - list_2 list_2.difference(list_1)

Maven学习记录(三)--实战引入Spring支持

一.创建项目 maven项目在IDEA下创建是相当容易 然后给定项目坐标,确定即可 二.完善项目目录结构 IDEA创建完项目结构和标准的maven项目有些差异,这个时候就需要我们手动调整一下 更改前结构 更改后 三.引入spring支持 引入框架无非三步走: 1. 引入架包 2. 创建配置文件 3. 加载配置文件 接下来的步骤也是按照这三步走方法来的 首先是pom.xml文件,增加spring和springMVC需要的包 <properties> <!-- springframe 版本控

shiro学习记录(三)

1.使用ehcache缓存权限数据 ehcache是专门缓存插件,可以缓存Java对象,提高系统性能. l ehcache提供的jar包: 第一步:在pom.xml文件中引入ehcache的依赖 <!-- 引入ehcache的依赖 --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>