第四章 类与对象 (郑莉版C++程序语言设计学习笔记)

/*学习笔记*/《c++语言程序程序设计(第4版)》郑莉 清华大学出版社 前言:大一时候学过少部分C,有一定基础,想在大二暑假利用实习期间将C++基本掌握。基于郑莉的教材,虽然略显冗杂和陈旧,但是相对比较详细,解析也比较清楚。此文章相当于读书笔记,供日后自己温习用,也供读者参考,欢迎指正和批评。第一章~第三章 主要讲的是语法、字符、函数一类的,与C相差不大,故快速略过。第四章 类与对象 面向对象程序设计基本特点:抽象,封装,继承,多态。 抽象:概括提取出问题的 阅读详情

加粗样式编写程序的目的是描述和解决现实世界中的问题,第一步就是要将现实中的类如实地反应在程序中。
本章主要介绍面向对象设计方法的主要特点:抽象,封装,继承,多态。

4.1面向对象的程序设计的基本特点

4.1.1 抽象

面向对象的方法中的抽象,是对具体问题(对象)进行概括,抽出一类对象的公共属性并加以描述的过程。
对问题的抽象过程,也是对问题的分析和认识过程。
对于一个问题的抽象包含两个方面:数据抽象和行为抽象。(或称为,功能抽象和代码抽象)
前者是描述某类对象的属性或状态,后者是描述某类对象共同行为或功能特征。

4.1.2 封装

封装就是将抽象得到的数据和行为相结合,形成一个游记的整体,也就是将数据与操作数据的函数代码进行有机的结合,形成“类”,其中的数据和函数都是类的成员。
可以对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。

4.1.3继承

C++ 提供类的继承机制,允许程序员在保持原有类特性的基础上,进行更具体,更详细的说明。

4.1.4 多态

多态性是指一段程序能够处理多种类型对象的能力。在C++中,这种多态性可以通过强制多态,重载多态,类型参数化多态,包含多态四种形式来实现。

  1. 强制多态,数据类型转换,表面多态
  2. 重载多态 函数重载,运算符重载,表面多态
  3. 类型参数化多态 函数模板,类模板,一般多态
  4. 包含多态 虚函数 一般多态

类和对象

在面向过程的结构化程序设计中,程序的模块是由函数构成的,函数将逻辑上相关的语句和数据封装,用于完成特定的功能。
在面向对象的程序设计中,程序模块是由类组成的。类是对逻辑上相关的函数与数据的封装,它是对问题的抽象描述。
另一角度
变量的声明如int i,int 类型包括了数据本身的属性以及对属性的操作,但是基本数据类型是有限的,C++的基本数据类型也远远不能满足描述现实世界中各种对象的需要。类就相当于用户自定义的类型。不仅可以用int型表示整数,也可以用类来表示“时钟”,“人”等对象。

4.2.1类的定义

语法:
class 类名称
{
public:
外部接口
protected:
保护型成员
private:
私有成员
};
在中可以只声明函数的原型,函数的实现(即函数体)可以在类外定义。

4.2.2类成员的访问控制

访问控制分为三种:

  1. 公有类型成员定义了类的外部接口
  2. 私有成员只能被本类成员函数访问,来自类外部的任何访问都是非法的。
  3. 保护类型成员的性质和私有成员的性质相似,其差别在于继承过程中产生的新类影响不同。

习惯
一般情况下,一个类的数据成员都应该声明为私有成员,这样内部数据结构不会对类意外的其余部分造成影响,程序模块之间的相互作用就被降低到最小。

4.2.3 对象

类实际上一种抽象机制,它描述了一类事物的共同属性和行为。对象就是这一类数据结构的某一特定实体(也是实例)。
对象所占的内存空间只是用于存放数据成员的。
在类的外部只能访问到类的公有成员;在类的内部成员函数,可以访问到类的全部成员。

4.2.4 类的成员函数

函数的实现:
返回值类型 类名::函数成员名(参数表)
{
函数体
}
成员函数调用中的目的对象:
使用“.”操作符指出调用所针对的对象,这一对象在本次调用中称为目的对象
在类的成员函数中,可以访问目的对象的私有成员,又可以访问当前类的其他对象的私有成员。

带有默认形参值的成员函数:

类成员函数的默认值,一定要写到类定义中,而不能写在类定义之外的函数实现中。

内联函数成员:
隐式声明:将函数体直接放在类内。
显式声明:采用inline显式声明
和普通内联函数一样

4.3 构造函数和析构函数

在定义对象的时候进行数据成员设置,称为对象的初始化。
C++的初始化由构造函数完成,清理工作由析构函数完成

4.3.1构造函数

在遇到对象声明语句时,程序会向操作系统申请一定的内存空间,我们希望编译器可以在分配内存空间一样将初始值写入,但是,类的对象太过复杂,编译器不知道如何产生代码来实现初始化。
所以程序员要自己编写初始化程序。
构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定状态。

特点
  1. 构造函数与类名相同
  2. 没有返回值
  3. 通常被声明为公有函数
  4. 只要类中有构造函数,编译器会自动插入对构造函数调用的代码。即构造函数在对象创建的时候将被自动调用。
  5. 无需提供参数的构造函数称为默认构造函数。如果类中没有写构造函数,编译器会自动生成一个隐含的默认构造函数。如果自己声明了构造函数,编译器便不会生成。
#include <iostream>
using namespace std;

class Clock {
    public:
        Clock (int newH , int newM,int newS);
        void setTime(int newH,int newM,int newS);
        void showTime();
    private:
        int hour,minute,second;
};

Clock::Clock(int newH,int newM,int newS){
    hour = newH;
    minute = newM;
    second = newS;
}

int main(){
    
}

4.3.2复制构造函数

复制构造函数的能力:
生成一个对象的副本时,可以新建一个对象,然后将每一个数据元素进行复制,但过于繁琐
不如将类具有自行复制对象的能力。

清华大学郑莉教授的C++程序设计课程课件精要 C++是一种静态类型的、编译式的、通用的编程语言,它支持过程化编程、面向对象编程以及泛型编程。C++被广泛用于系统/应用软件开发、游戏开发、驱动程序编写、实时物理模拟等领域。在本章中,我们将介绍C++的基础知识,为读者打下坚实的编程基础。设计模式是软件工程中解决特定问题的最佳实践。它们是经过反复验证的解决方案模板,可应用于软件设计的多个方面。面向对象设计模式特别关注如何通过类和对象的组织来适应设计问题。模式的种类:设计模式大致可以分为创建型模式、结构型模式和行为型模式。 阅读详情

相关推荐

郑莉C++程序设计教程第3版:全面掌握C++基础与高级特性

C++是一种静态类型、编译式、通用的编程语言,广泛应用于系统/应用软件开发、游戏开发、驱动程序等,以其效率高和面向对象特性深受开发者喜爱。在 C++ 中,类是创建对象的蓝图或模板。类定义了对象将拥有的方法和变量。对象是根据类定义创建的实例。public:// 公有成员变量void memberFunc() { // 公有成员函数// 操作代码// 创建对象// 访问成员变量// 调用成员函数return 0;在上述代码中,MyClass是一个类,包含一个公有成员变量。

weixin_30789053的博客 534

C++基础课-郑莉 1-4章

清华郑莉C++课程及书籍

Bobowen的博客 1293

清华大学郑莉教授C++语言程序设计课件全集

C++是一种广泛使用的编程语言,由Bjarne Stroustrup在1980年代初期在贝尔实验室开发,作为一种改良的C语言,它继承了C语言的诸多特性,同时增加了面向对象编程(OOP)的能力。C++被设计为能够高效地管理内存和处理低层次的硬件细节,同时提供更加高级的抽象。

weixin_42146230的博客 1063

【清华大学-郑莉教授】C++语言程序设计 类与对象

笔记

m0_73799537的博客 817

《C++语言程序设计》郑莉版电子课件精讲

本文还有配套的精品资源,点击获取 简介:《C++语言程序设计》电子课件由著名教授郑莉编著,专为编程初学者和进阶者设计。该课件深入浅出地介绍了C++的面向对象特性、基础语法和高级功能,并结合实例展示其在软件开发中的应用。电子课件形式使得学习更高效,易于理解和掌握。学习C++,不仅可以提升编程技能,还能为学习其他编程语言打下良好基础。课程内容包括基础语法、控制结构、函数、数组、...

weixin_35752122的博客 1623

C++程序设计郑莉课件精讲与实践

函数在C++中是最基本的代码组织单元,它将一段逻辑封装起来,可以被重复调用。理解函数的作用对于学习C++至关重要。函数可以接收输入参数,并可能返回一个结果。它的基本结构包括返回类型、函数名、参数列表和函数体。代码逻辑分析:以一个简单的函数为例,该函数接收两个整数参数,返回它们的和。int是返回类型,表示函数返回一个整数。add是函数名,是参数列表,它们都是整数类型。函数体包含在花括号{}中,其执行的操作是返回两个参数的和。

weixin_42350014的博客 911

清华郑莉C++语言程序设计学习笔记(2)-类与对象、数据的共享与保护

类与对象、数据的共享与保护、数组指针字符串

weixin_42194879的博客 761

OpenCV透视变换原理与实战:从单应性矩阵到文档矫正

透视变换是计算机视觉中实现平面图像几何校正的基础技术,其核心在于利用单应性矩阵(Homography)建模三维空间到二维图像的射影关系。不同于仿射变换的线性约束,透视变换通过有理函数映射支持任意凸四边形间的非线性变形,天然适配真实场景中的远小近大、平行线汇聚等透视现象。该技术具备确定性强、计算高效、无需训练数据等工程优势,广泛应用于文档扫描矫正、车牌识别预处理、AR贴图对齐及无人机正射影像生成等场景。结合OpenCV的cv2.findHomography与cv2.warpPerspective接口,开发者可

weixin_30873847的博客 652

Python程序开发——第六章 类与对象

# 一、类 ## (一)类、对象 Python是一种面向对象语言,面向对象有两个概念,分别是类和对象。 类是对多个对象的共同特征的抽象描述,可以说`类是对象的模板`。 `对象是类的实例`,用于描述现实中的个体。 ## (二)类的定义 根据类与对象的关系,我们知道创建对象之前需先定义类,类中可以定义数据成员和成员函数,前者用于描述对象特征,称为属性,后者用于描述对象行为,称为方法,类中的方法的第一个参数必须为`self`,这种方法也叫`实例方法`,只能通过类实例化的对象进行调用。

小宇y的博客 846

S32K144 ADC硬件触发实战:PDB模块配置与DMA传输全流程解析

本文详细解析了S32K144微控制器中ADC硬件触发的全流程实现。通过配置PDB模块产生精确的定时触发信号,并联动DMA实现转换数据的自动搬运,构建了一个无需CPU干预的高效、低抖动数据采集系统。文章深入讲解了时钟配置、模块初始化、DMA引擎搭建及实战调试技巧,为汽车电子和工业控制应用提供了可靠的解决方案。

weixin_29174141的博客 225

在 STM32CubeIDE 中针对 STM32F407 移植 ThreadX

在 STM32CubeIDE 中针对 STM32F407 移植 ThreadX,不依赖盗版破解的Keil MDK、IAR等软件。

wangyuewu08的博客 3374

类与对象特性

1.面向对象用语: 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 数据成员(属性):类变量或者实例变量, 用于处理类及其实例对象的相关的数据。 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这

风间琉璃的博客 596

《广告核心指标驱动的AI投放系统:从数据洞察到智能决策的全链路优化》

本方案通过构建广告核心指标驱动的AI投放系统,实现从数据采集到智能决策的全链路自动化。

专注Java领域与微服务架构,热爱人工智能与深度学习 1067

C++语言程序设计(第5版 郑莉、董渊)学习笔记

C++程序 整理笔记后续复习使用 前三章 大多关于C 后面的 才是真正C++精华软件:各种程序+文档资料 指令:计算机可识别的命令(所有指令的集合叫做指令系统) 汇编语言:将机器语言映射为一些可被读懂的助记符 eg:ADD 高级语言:屏蔽机器细节,采用有一定含义的数据命名和执行语句 面向对象的语言:为了能更直接地描述客观世界中存在的事物面向对象的编程语言将客观事物看作具有属性和行为(或称服务)的对象,通过抽象找出同一类对象的共同属性和行为,形成类。①自顶向下、逐步求精; ②程序结构按功能划分为若干个基本模块

陕西师范大学 人工智能 周一卓 的博客 1万+

葵花 Himawari 8/9号数据学习记录-01-数据初识

葵花卫星学习记录,第一章:卫星的来源与卫星数据的波段介绍

weixin_44111909的博客 533

单细胞分析避坑指南:SCTransform和Harmony参数设置详解

本文深入解析了单细胞分析中SCTransform标准化与Harmony批次校正的关键参数设置。针对10x Genomics等数据,详细探讨了如何通过调整`vars.to.regress`、`theta`等核心参数,在有效去除技术噪音的同时,避免过度校正以保留关键的生物学差异,从而提升分析结果的可靠性与可解释性。

weixin_29053073的博客 606

c++语言程序设计(郑莉)学习笔记(详细中的详细)

前一阵子上传了一个C++学习笔记资料,反响平平,无人下载,所以今天写一篇博客来推荐一波我的笔记。 该xmind笔记是我在2020年准备东南大学复试期间写下的,内容是我在反复学习《C++语言程序设计(郑莉)》书籍,以及哔哩哔哩上的197集清华大学公开课的基础上,总结而成的,内容可说是非常详细了,最后一遍的时候,我把编程时的一些要注意的细节也添上去了,无论是正在学习C++的新学者,还是准备C++考研复试的学生,或者正在准备C++面试的求职者,都可以来看,电脑手机都可以看,ipad竖屏最佳。 总体框架:

我有明珠一颗的博客 5824

ATS Request中的PASID的作用是什么

摘要: PASID(进程地址空间标识符)是PCIe ATS(地址转换服务)中的关键组件,用于标识不同进程或虚拟机的地址空间。其主要作用包括:1)支持多进程共享设备时隔离地址空间;2)实现共享虚拟地址(SVA),允许用户态程序直接访问设备;3)提升虚拟化性能(如SIOV),通过PASID区分虚拟机请求;4)增强安全性,基于PASID限制设备内存访问权限。PASID通过20位标识符在TLP前缀中传递,与IOMMU协作完成地址转换与缓存,适用于高性能计算、AI及虚拟化场景,但依赖硬件支持和软件适配。

元直的博客 1560

最值得收藏的 C++ 清华大学郑莉版全部知识点思维导图整理, 东南大学软件工程初试906科目

本文的思维导图根据清华大学郑莉出版的C++书籍整理而来并标记出重点内容,适用于想考东南大学软件工程906的同学 思维导图源文件已经发布在我的资源当中,有需要的可以去 我的主页 了解更多学科的精品思维导图整理 本文可以转载,但请注明来处,觉得整理的不错的小伙伴可以点赞支持一下哦! 一、绪论 二、C++简单程序设计 三、函数 四、类与对象 五、数据的共享与保护 六、数组、指针与字符串 七、继承与派生 八、多态性 九、群体类和群体数据的组织 十、泛型程序设计与C++标

孤柒的博客 2万+

【教程4>第7章>第6节】基于FPGA的Viterbi维特比译码verilog实现——ACS加比选单元1

本文介绍了ACS加比选单元模块在FPGA中的实现过程,重点讲解了维特比译码中的ACS单元功能及其在硬件实现中的关键问题。文章首先概述了ACS单元在维特比译码中的作用,即通过计算和比较分支度量值来选择最优路径。接着,详细描述了FPGA实现中的分支度量值归一化处理策略,并指出了其存在的弊端。随后,文章提供了基于Verilog的ACS加比选单元模块代码,解释了其输入输出端口及工作流程。最后,总结了本小节内容,并预告了下一章节将涉及ACS顶层模块的开发与仿真测试。

FPGA/MATLAB学习教程/源码/项目合作开发 568

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

第三章 函数 (郑莉版C++程序语言设计学习笔记)

在面对面向过程的程序设计中,函数是模块划分的基本单位,是对处理问题的抽象 在面向对象的过程中,是对功能呢搞得抽象 3.1函数的定义和使用 主函数是程序执行的开始点。 调用其他函数的函数被称为主调函数。 被其他函数调用的函数被称为被调函数 3.1.1 函数的定义 语法形式 类型说明符 函数名 (含类型说明的形式参数表) { 语句序列 } 形式参数 type1 name1,type2,name2.。。。,typen namen main函数的形参是命令行参数,由操作系统进行初始化。 函数在没有调用

include666的博客 421

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

第4章 类与对象 C++语言程序设计第五版 - 郑莉

本专栏为C++学习笔记,参考书籍为:C++语言程序设计 第五版 -清华大学出版社- 郑莉 B站视频:https://space.bilibili.com/702528832/video PPT与代码已上传:https://download.youkuaiyun.com/download/weixin_45755332/75626784 版权归原作者所有如有侵权请立即与我联系,必将及时处理。 本想考东软的,结果今年缩招,直接改隔壁科软,当时的学习笔记发出来供大家参考指正。科软23分肯定会升,但肯定不会到380,撑死350

小白不白 1159

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C++语言程序设计第五版 - 郑莉(第四章课后习题)

4-14定义一个Tree(树)类,有成员ages(树龄),成员函数grow(intyears)对ages加上years,age()显示tree对象的ages的值。4-13定义一个Circle类,有数据成员radius(半径),成员函数getArea(),计算圆的面积,构造一个Circle的对象进行测试。4-9设计并测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角坐标,根据坐标能计算矩形的面积。4-11定义并实现一个矩形类,有长、宽两个属性,由成员函数计算矩形的面积。...........

weixin_51704442的博客 5007

郑莉老师c++第五版+b站视频 学习笔记

c++

qq_42863961的博客 1568

【学习笔记】C++语言程序设计(郑莉):类与对象

C++语言程序设计:类与对象

Mecaly的博客 437

郑莉C++教程速成笔记——类与对象

文章目录面向对象的编程特点抽象封装继承多态类和对象的定义为数据成员设置类内的初始值,用于初始化数据成员类成员的访问控制公有类型成员私有类型成员保护类型成员对象的定义语法类的成员函数内联成员函数例子构造函数作用形式调用时机默认构造函数隐含生成的构造函数构造函数写法一般来讲,都要为类写一个默认的构造函数,因为其他人使用时可能不会给初始值委托构造函数复制构造函数复制构造函数被调用的三种情况隐含的复制构造...

WWtianxiang的博客 811
上一篇: 第三章 函数 (郑莉版C++程序语言设计学习笔记)
include666
博客等级 码龄9年 12粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值