C++ 类和对象(上)

类和对象cpp 【类的成员函数和类的定义分开写】(截到人脸郭老师orz【注意这里的::表示不是全局函数,而是一个类的成员函数】 阅读详情

目录

1. 类的定义

1.1 定义类的语法

1.2 定义类的两种方法

2. 类的访问限定符及封装

2.1 访问限定符

 2.2 封装

3. 类的实例化

4.类模型的大小

4.1 类对象的大小计算方法

4.2 内存对齐规则

5. this 指针

5.1 this的引入

5.2 this指针的特性


1. 类的定义

1.1 定义类的语法

class className
{
 // 类体:由成员函数和成员变量组成
 
}; // 一定要注意后面的分号

class为定义类的关键字,也可以用struct作为定义类的关键字。一般情况下,我们使用class。它们的区别在于默认访问限定符不同,别的没有区别。ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。

类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。

1.2 定义类的两种方法

1.将成员函数的声明和定义全部放在类体中。

需要注意的是:成员函数如果在类中定义,且函数体较为短小时,编译器默认将它当成内联函数。

class Person
{
public:
	void Show()
	{
		cout << _name << "--" << _sex << "--" << _age << endl;
	}
private:
	char* _name;
	char* _sex;
	int _age;
};

2.声明放在.h文件中,定义放在.cpp文件中。

一般在工程中,我们更推荐用这种方法。

class Person
{
public:
	void Show();
private:
	char* _name;
	char* _sex;
	int _age;
};

//注意这里必须加类名和访问限定符
void Person::Show()
{
	cout << _name << "--" << _sex << "--" << _age << endl;
}

2. 类的访问限定符及封装

2.1 访问限定符

访问限定符有三种:public(公有),protected(保护),private(私有)。

C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。

【访问限定符说明】

1. public修饰的成员在类外可以直接被访问

2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)

3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

4. class的默认访问权限为private,struct为public(因为struct要兼容C)

 2.2 封装

【面试题】 面向对象的三大特性:封装、继承、多态。

封装:我们使用类数据和方法都封装到一起。 不想给别人看到的,我们使用protected/private把成员封装起来。开放一些public的成员函数对成员合理的访问。所以封装本质是一种管理。

3. 类的实例化

定义一个类时,类体中的成员函数和成员变量都是声明,并没有创建出对象和分配出实际的内存空间。用类类型创建对象的过程,称为类的实例化。当类实例化时,才会分配空间。

4.类模型的大小

4.1 类对象的大小计算方法

同一个类定义出的多个对象中,除了成员变量不同,使用方法都是相同的,因此为了效率,成员函数放在给公共的代码段中,不计入类对象的大小。

在计算类对象的大小时,只计算成员变量的大小,和结构体计算大小的方法一致,考虑内存对齐。

注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类。

4.2 内存对齐规则

1. 第一个成员在与结构体偏移量为0的地址处。

2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。

对齐数 = 编译器默认的一个对齐数与该成员大小的较小值。 VS中默认的对齐数为8。

3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。 4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

5. this 指针

5.1 this的引入

以下方代码为场景,编译器是如何知道调用d1还是d2的成员函数的呢?

class Date
{
public:
	void Display()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

	void SetDate(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year; // 年
	int _month; // 月
	int _day; // 日
};
int main()
{
	Date d1, d2;
	d1.SetDate(2018, 5, 1);
	d2.SetDate(2018, 7, 1);
	d1.Display();
	d2.Display();
	return 0;
}

C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参 数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

5.2 this指针的特性

1. this指针的类型:类类型* const

2. 只能在“成员函数”的内部使用

3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this 形参。所以对象中不存储this指针,this指针存在栈上。

4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

5.this指针可以为nullptr,用nullptr调用成员函数本身是没有问题的,因为成员函数存在在代码段,访问成员函数并不会解引用该this(nullptr)指针,但是如果函数内部访问了成员变量,程序便会崩溃。

C++类和对象(上) /类体:由成员函数和成员变量组成//一定要注意后面的分号class为定义类的关键字,ClassName为类的名字(自定义),{}中为类的主体,注意类定义结束时后面的分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1.声明和定义全部放在类体中,需注意: 成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2.类声明放在.h文件中,成员函数的定义放在.cpp文件中。 阅读详情

相关推荐

C++中的“类和对象”

类的定义,实例化,this指针

2402_83250773的博客 990

【c++】cpp类和对象

c++中类和对象基本用法

hutaotaotao的博客 1269

NVIDIA DGX Spark实战:如何在桌面上轻松运行200B参数大模型?

本文详细介绍了如何利用NVIDIA DGX Spark在桌面端轻松运行200B参数大模型。通过实战演示,从系统初始化、模型获取部署到内存管理与性能调优,重点解析了其统一内存架构如何解决本地推理的显存瓶颈,并探讨了进行轻量化微调(如LoRA)的可能性,为AI开发者和研究团队提供了高效的本地化大模型操作方案。

weixin_29054195的博客 885

Cpp-类和对象

title: 类和对象 date: 2019-03-15 14:05:24 tags: Cpp categories: Cpp 类的引入 万物皆对象。类是一种用户自定义的数据类型,包括表示属性的成员变量和表示行为的成员函数,类是现实世界对象的抽象,对象是类虚拟世界的实例。 C++ 中 struct 中不仅可以有变量,还可以有函数。 类定义结束时后面分号。 成员函数声明和定义可以全部...

ahojcn 的博客 1896

别再硬编码了!Flowable工作流动态审批人配置全解析(Spring Boot集成版)

本文深入解析Flowable工作流在Spring Boot中的动态审批人配置技术,通过角色、部门等变量实现审批流程的灵活设计。文章详细介绍了架构原理、前端配置映射、动态候选组解析及查询优化方案,帮助企业提升审批流程的适应性和维护效率。

weixin_30919571的博客 136

Python量化投资入门教程:从零构建你的第一个交易策略

量化投资教程以数学模型和计算机程序实现超额收益,选用Python工具链完成数据获取、策略构建及回测。通过移动平均线交叉策略示例,展示数据预处理、信号生成、收益计算及可视化全流程,结合收益率、最大回撤和夏普比率评估策略,并建议参数优化与策略融合提升稳健性。

ylmx5201314的博客 2456

cpp.1 C++类和对象(上)

文章目录第一部分 C++入门1.命名空间2.缺省参数3.函数重载4.引用 第一部分 C++入门 1.命名空间 命名空间实际上就是为了防止命名相同会导致很多的冲突,可以使用命名空间对标识符进行本地化,来避免命名的冲突 使用方式: 1.加命名空间名称及作用域限定符std::cout<<"hello world"<<std::endl; 2.使用using将命名空间中成员引入using std::cout; 3.用using namespace 命名空间名称引入using namespac

Pinksatrfish的博客 368

Yolov5s可视化网络结构图

Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:点击查看 ...

江南研习社 15万+

【C++】类和对象

类的基本思想是数据抽象(data abstraction)和封装(encapsulation)。数据抽象是一种依赖于接口(interface)和实现(implementatino)分离的编程技术。对象是类的实例,类是对象的模板。

jmlangel_的博客 5955

[QMT量化交易小白入门]-二十四、年化收益47%的全球核心资产轮动策略(含代码解析)

m_days = 25 #动量参考天数period=200m_days被设置为25,表示动量参考的天数为25天;period被设置为200,用于指定获取市场数据的周期长度。

木头大左的博客 2969

实战|mitmproxy+Playwright 拦截篡改Cloudflare验证流程,实现无感爬取(2026实测可用)

2026年对抗Cloudflare,别再死磕滑块、轨迹、算法。高伪装浏览器 + 中间层劫持篡改验证流程Playwright + mitmproxy = 无感过CF这篇是纯实战、无废话、可直接上线的方案。你只要把目标网站、cf_clearance填进去,就能跑通。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1284

CPP:类和对象

cpp类和对象知识点

weixin_54832720的博客 969

实现边缘实时动物检测:YOLOv5模型优化与树莓派4B部署全攻略

本文介绍了基于高性能计算机训练YOLOv5目标检测模型,并部署到树莓派4B实现实时动物检测的全流程。主要内容包括:1)在高性能计算机上通过Anaconda创建虚拟环境,安装YOLOv5项目并进行模型训练;2)将训练好的best.pt模型迁移到树莓派,配置轻量级Miniconda环境;3)连接树莓派摄像头,运行实时检测程序。该系统兼顾了训练效率和边缘设备部署的实用性,可广泛应用于智慧农业、生态监测等场景。文中详细说明了数据准备、环境配置和部署步骤,为开发轻量级目标检测系统提供了完整参考方案。

m0_64661770的博客 201

【Cpp】类和对象

类的认识,类和对象(一)

石墨博客 1175

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【C++】类和对象核心总结

类的引入+定义(struct ==> class),类的访问限定符+封装+作用域,类的实例化(类 类型创建对象的过程)+计算类的大小(考虑内存对齐),隐藏的this指针,类的六个默认成员函数,初始化列表(声明远远不够,还得定义对象),explict关键字,static成员,友元,内部类,匿名对象,编译器优化

小羊study_sheep的博客 5594

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C++】类和对象——下

尽量使⽤初始化列表初始化,因为那些你不在初始化列表初始化的成员也会⾛初始化列表,如果这个成员在声明位置给了缺省值,初始化列表会⽤这个缺省值初始化。内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其。友元提供了⼀种突破类访问限定符封装的⽅式,友元分为:友元函数和友元类,在函数声明或者类声明的前⾯加friend,并且把友元声明放到⼀个类的⾥⾯。

L286594的博客 1361

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C++实验四——类和对象(2)

实验报告题目1题目2 【实验名称】 实验四 类和对象(2) 【实验内容】 题目1 课本习题4.10 设计一个用于人事管理的“人员”类。由于考虑到通用性,这里只抽象出所有类型人员都具有的属性:编号、性别、出生日期、身份证号等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录人和显示。要求包括:构造函数和析构函数、复制构造函数、内联成员函数、带默认形参值的成员函数、类的组合。 源代码: Date.h /*出生日期类声明*/ #ifndef _Date_H_ #

Onlyone_1314的博客 2336

【C++指南】一文总结C++类和对象【下】

本章节主要讲初始化列表、类型转换、静态成员变量和函数、友元、内部类、匿名对象及编译器优化的各种情况。

egoist2023的博客 3493

c++学习 类和对象上

【代码】c++学习 类和对象上。

qq_50934329的博客 199

【C++】类和对象【上】

本期博客带你了解C++中类和对象相关知识。

2401_86785052的博客 1043

【C++】类和对象(1)

C++类和对象,内存对齐,this指针,

Xie_sheng的博客 1791

C++ ——类和对象

C++ ——类和对象C++ ——类和对象C++ ——类和对象C++ ——类和对象C++ ——类和对象C++ ——类和对象

weixin_49376454的博客 1230

cpp中的类和对象

类和对象的区别: 类(class):概念产物,是设计产物(相对于图纸),没有开辟空间 对象(object):是由类实例化出来的代码和数据的集合 类的实例化就成为了对象 我们操纵的是对象,不是类 封装特性:对外是不可访问的 this指针 编译过程: 第一步:识别类里面的属性成员(变量) 第二步:识别方法,只识别方法的声明 第三步:改写 ...

qq_44423388的博客 951

C++ —— 类和对象

类是对象一种抽象的描述,是定义同一类所有对象的变量和方法的蓝图或模型,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它,因为这些成员变量只是声明,只有在实例化出对象的时候,才会分配空间。所以,用类类型在物理内存中创建对象的过程,就是类实例化出对象。(一个类可以实例化出多个对象,实例化出的对象,会占用实际的物理空间,用来存储类成员变量 )类和对象的关系是类是对象的抽象,而对象是类的具体实例。‌C语言中,我们定义一个结构体是用的struct//定义一个日期类型int year;

2301_80873544的博客 1534
上一篇: LeetCode517_超级洗衣机(C++)
下一篇: C++模板初阶
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值