C++对象和类概述

news2025/7/16 8:32:56

11 对象和类

11.1 过程式和面向对象编程

面向过程编程:先考虑函数,然后再细化到数据

面向对象编程:对象(数据+函数)

11.2 抽象和类

在计算中,抽象是根据与用户的接口来表示信息的关键步骤。

11.2.1 什么是类型?

总之,只当基本类型完成了三项工作

  • 1.决定数据对象需要的内存数量
  • 2.决定如何解释内存中的位(long和float在内存中占用的位数相同,但将它们转换位数值的方法不同)
  • 3.决定可使用数据对象执行的操作或方法

11.2.2 C++中的类

类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。

自定义类的思路:以股票为例

1.首先要思考要将什么作为一个基本单位:你可以把一个人目前持有的某只股票作为一个基本单位

2.需要哪些功能(方法)

1. 获得股票
2. 增持
3. 卖出股票
4. 更新股票价格
5. 显式关于所持股票的信息

3.需要存储哪些信息

1. 公司名称
2. 所持股票的数量
3. 每股的价格
4. 股票总值

4.定义类

  • 1.类声明:以数据成员的方式描述数据部分,以成员函数(方法)的方式描述共有接口。
  • 2.类方法定义:描述如何实现类成员函数

什么是接口?

接口是一个共享框架,供两个系统交互时使用。—如在计算机和打印机之间或者用户或计算机程序之间。

接口的含义:让程序员能够编写与类对象交互的代码,从而让程序能够使用类对象。

img

11.2.3 访问控制

使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数来访问对象的私有成员。因此公有成员函数是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。

数据隐藏:程序无法访问对象的私有成员。它保证了数据的完整性。(不仅不允许程序员直接访问数据,而且确定了函数的接口,然后当你发现更好的方式实现函数时,你可以直接更改函数具体的实现而无需更改接口,这提高了程序的可维护性)

封装:数据隐藏(将数据放入类的私有成员),在私有部分中隐藏实现的函数细节,将类函数定义放在与类声明分开的文件中。

11.2.4 成员访问控制 Public or Private?

不必在类声明中使用关键字private,因为这是类对象的默认访问控制。

class World
{
        float mass; // private by default
        char name[20]; // private by default
    public:
        void tellall(void);
        ...
};

类和结构体的区别?

唯一的区别是结构体的默认访问类型是public,而类的默认类型是private。c++程序员通常使用类来实现类描述,同时将结构体限制为表示纯数据对象(通常称为普通的老式数据结构,或POD结构)。

11.2.5 实现类成员函数

类成员函数与普通函数的区别:

  • 1.定义类成员函数时,使用作用域解析运算符(::)来标识函数所属的类;
  • 2.类方法可以访问类的private组件

类作用域:

//这两个类成员函数相互不干扰
void Stock::update(double price);
void Buffoon::update()

一个类成员函数可以直接使用同类下的其他成员函数而无需::符号(在类定义或成员函数定义中都可),但是其他地方必须使用class::符号,eg:Stock::update()。

11.2.6 内联方法

定义位于类声明中的函数都将自动成为内联函数。

下面这两种定义是等价的:

class Stock // class declaration
{
private:
	...
	void set_tot() { total_val = shares * share_val; }//是个内联函数
public:
	...
}; // note semicolon at the end
#endif

class Stock
{
private:
	...
	void set_tot(); // definition kept separate
public:
	...
};
inline void Stock::set_tot() // use inline in definition
{
	total_val = shares * share_val;
}

11.2.7 方法使用哪个对象?

调用成员函数时,它将使用被用来调用它的对象的数据成员。

下面这两个函数调用使用的是各自的shares and share_val:

Stock kate, joe;
kate.show(); // the kate object calls the member function
joe.show(); // the joe object calls the member function

所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员;但同一个类的所有对象共享同一组类方法,及每种方法只有一个副本。

在OOP中,调用成员函数被称为发送消息,因此将同样的消息发送给两个不同的对象将调用同一个方法,但该方法被用于两个不同的对象。见下图。

img

11.2.8 使用类

C++的目标是使得使用类与使用基本的内置类型(如int和char)尽可能相同。

基本上基本类型能做的自定义的类也能做。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT默认自带mscv2017 2019 ,配置vs2022

试验QT版本:5.14.2 所需文件: QT安装程序--qt-opensource-windows-x86-5.14.2.exe具体地址是:Index of /archive/qthttps://download.qt.io/archive/qt/Microsoft 生成工具 2022 Visual Studio 2022 IDE - 适用于软件开发人员的编程工具win…

Cholesterol胆固醇参数说明及相关研究

Cholesterol胆固醇是哺乳动物细胞中产生的一种主要甾醇,是细胞存活和增殖所必需的。它是哺乳动物细胞膜的一种成分,与膜磷脂、鞘脂和蛋白质相互作用,影响它们的行为。它也是各种基于脂质的药物递送(LBDD)系统的组成部分…

[oeasy]python0015_十六进制_hexadecimal_字节形态_hex函数

十六进制(hexadecimal) 回忆上次内容 上次数制可以转化 bin(n)可以把数字转化为 ​​2进制​ binary接收一个整数(int)得到一个二进制数形式的字符串数字在计算机中是用二进制存储的 但是展示给我们的时候用的是十进制也就是0-9这10个字符的形式都说字节是计算机存储的最小单…

基于微信小程序的自习室预约系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Mav…

Me-Tetrazine-DBCO,1802908-04-8,ICG-Tetrazine四嗪类试剂知识分享

Me-Tetrazine-DBCO,Methyltetrazine-PEG4-azide,ICG-Tetrazine这几种试剂都含有四嗪,或者甲基四嗪,其主要的性能特点有哪些?西安凯新生物是国内业PEG供应商,其中包括各种规格的点击试剂,&#x…

nvm (node 版本管理器)

ps: 如果已经安装node,或者nvm,先卸载,再执行下面操作。 1. 下载nvm nvm github 下载后以管理员身份运行 setup.exe 安装就根据步骤点下一步就行了 2. 安装node nvm基础操作 使用 nvm install node版本号,但是这里有时候会报…

[附源码]java毕业设计基于的城镇住房公积金管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Vue项目实战

Vue项目实战 1、项目介绍 1.1、对象 有Vue2、Vue3组合api基础知识,TypeScript基础知识1.2、涉及技术 CSS3 TypeScript Vue3.2 Vuex4.x Vue Router4.x Vite2.x Element-Plus1.3、技能 掌握Vue3.2语法糖的使用掌握Vue3中组合api的使用掌握组件中业务逻辑抽离的方…

第七章 Java编程-多线程

线程几乎在每个编程语言中都有,它其实是操作系统的概念,编程语言是运行在操作系统上的

RK3568平台开发系列讲解(图像篇)BMP图像处理

🚀返回专栏总目录 文章目录 一、BMP文件格式解析1.1、位图文件头(bitmap-file header)1.2、位图信息头(bitmap-information header)二、LCD上显示代码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢我们今天来讲解BMP文件格式的解析。 一、BMP文件格式解析 BMP是一…

发那科机床联网

一、设备信息确认 1、确认型号 数控面板拍照确认: 此系统为:0I-TD 注:凡是系统中带i的,基本上都有网络通讯和采集功能。如果系统中带有mate字样,并且比较老可能不含网口。 2、确认通讯接口 发那科的通讯接口有两种…

【SpringBoot项目】SpringBoot项目-瑞吉外卖【day02】员工管理业务开发

文章目录前言员工管理业务开发完善登录功能问题分析代码实现功能测试新增员工需求分析数据模型代码开发功能测试统一处理异常员工信息分页查询需求分析代码开发功能测试启用/禁用员工需求分析代码实现测试编辑员工信息需求分析代码实现功能测试总结🌕博客x主页&…

VS2022 性能提升:更快的 C++ 代码索引

基于 Visual Studio 2022 17.3 版本的性能提升,我们在新的 17.4 版本中添加了更多的小优化,且听我慢慢道来。 不论你是一个工作在大型代码库下的游戏开发者,或者你在解决方案中有非常多的 C 工程,在 Visual Studio 2022 17.4 中&…

【附源码】计算机毕业设计JAVA家装建材网

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

浅析DNS劫持及应对方案

DNS是网络连接中的重要一环,它与路由系统共同组成互联网上的寻址系统,如果DNS遭遇故障,“导航系统”失效,网络连接就会出现无法触达或到达错误地址的情况。由于的DNS重要作用及天生脆弱性,导致DNS自诞生之日起&#xf…

React源码解读之任务调度

React 设计体系如人类社会一般,拨动时间轮盘的那一刻,你便成了穿梭在轮片中的一粒细沙,角逐过程处处都需要亮出你的属性,你重要吗?你无可替代吗?你有特殊权限吗?没有,那不好意思&…

Autosar模块介绍:AutosarOS(5)

上一篇 | 返回主目录 | 下一篇 AutosarOS:错误处理、跟踪与调试(5)1 钩子例程2 错误处理(ErrorHook)3 系统启动(StartupHook)4 系统关闭(ShutdownHook)5 系统保护&#x…

【面试题】margin负值问题

margin-top和margin-left负值&#xff0c;元素向上、向左移动&#xff1b;margin-right负值&#xff0c;右侧元素左移&#xff0c;自身不受影响&#xff1b;margin-bottom负值&#xff0c;下方元素上移&#xff0c;自身不受影响&#xff1b; 1. margin top left为负数 <st…

0095 贪心算法,普利姆算法

import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; /* * 贪心算法 * 1.指在对问题进行求解时&#xff0c;在 每一步 选择中都采取最好或最优的选择&#xff0c;希望能够导致结果是最好或最优的算法 * 2.所得到的结果不一定是最优结果&…

【SSH远程登录长时间连接后容易出现自动断开的解决方案】

SSH远程登录长时间连接后容易出现自动断开的解决方案0 问题描述1 方法一1.1 打开ssh_config文件1.2 在文件中添加以下内容1.3 重启ssh2 方法二2.1 打开sshd_config文件2.2 在文件中添加以下内容2.3 重启ssh0 问题描述 使用SSH连接远程服务器的时候 报出 client_loop send disc…