C++(CPP)中的类与对象(析构,构造,const,static)

深入C++对象模型:构造、拷贝、析构与内存布局全解析 C++对象模型是理解C++底层机制的核心概念,它定义了对象在内存中的布局、生命周期管理及多态实现原理。通过剖析编译器隐式生成的构造函数、拷贝操作与析构函数,开发者可以掌握资源管理、性能优化及避免内存错误的底层逻辑。这一模型的技术价值在于为编写高效、安全的C++代码提供理论基础,尤其在涉及RAII、智能指针及移动语义的现代C++工程实践中至关重要。应用场景包括高性能计算、游戏引擎、系统编程等对内存控制要求严格的领域。本文聚焦于C++对象模型中的构造语意学、拷贝语意学及虚函数表机制,通过分析浅拷贝与深拷贝的陷阱 阅读详情

一、类和对象

  • 类是对象抽象,对象是一个具体实体;

  • 类是一个数据类型(类似于C语言中的结构体,还可以是函数)

  • 对象是通过类这一个数据类型所定义的变量;

  • 类中主要包含两种类型的成员:

    成员变量 -- > 描述的类的属性;

    成员函数 --> 描述的类的行为;

如何去声明一个类:
class 类名     /*类头, class可以用struct替换,成员的默认权限有所不同,*/
类体
{
     属性: 类的成员变量
     行为: 类的成员函数 
};

     注意:对于类的成员的属性主要包含三种:
     private: 私有成员,只能在当前类中可以访问;
     protected:受保护成员,只能在当前类或者派生类中访问;/*派生类的时候,会做介绍*/
     public:公有成员,可以在任意的地方访问    
    

声明一个类的形式:
1. 多个文件:(在实际应用过程中,大多采用此方式实现)
    .h文件做类的声明(成员的声明);
    .cpp文件做成员函数的定义;
2. 一个文件:(针对比较简单的类的时候使用)
    将成员函数在类的内部声明的时候做定义;
    将成员函数在类的外部的做定义,类的内部只需要声明函数就ok;

二、构造与析构函数

  构造函数:

  1.     当声明类的时候,如果没有实现构造函数,系统会执行默认的构造函数;

  2.     构造函数的函数名和类名相同,并且没有返回值的函数是构造函数;

  3.     构造函数的参数可以设计者根据需求自行设计,所以参数可以不同,也就说构造函数        可以重载;

  4.      构造函数的参数可以设计默认参数值;

  5.      构造函数的作用,用于对象的初始化(创建对象的时候,对对象的成员进行初始化的        过程);

  析构函数:

  1.    在声明一个类的时候,如果在类中没有实现析构函数,系统会自动生成一个默认析构       函数;

  2.    所谓的析构函数,是构造函数的反函数,函数名为(~类名),没有返回值也没有参       数的函数;

  3.   析构函数可以由系统自动去执行,也可以由程序显示调用执行;

  4.  析构函数不可以重载,因为析构函数没有参数;

  复制构造函数;

 

三、static 关键字的含义


C语言中:

    1. 修饰局部变量:改变了变量的存储位置和生命周期
    

  •     普通的局部变量:存储位置为栈区,生命周期为局部模块内(模块内程序执行的时候开辟空间,到模块执行结束的时候,释放资源);

  •     static修饰的局部变量:存储位置在静态存储区,生命周期是整个程序执行期间;

    
  2. 修饰全局变量和函数:改变了链接属性(作用域)
        

  •      普通的全局变量或者函数:作用域是整个程序(程序的任意地方都可以链接)

  •     static修饰的全局变量或者函数:作用域在定义的文件中有效,(只能在当前文件中可以链接);

 

 CPP中:
    修饰成员:静态成员,该成员被设置为多个对象共同拥有的成员,不再属于具体的某一个对象;
访问形式:
        
1. 对象.成员;
    
2. 类::成员;

 

四、const关键字
 
在C语言中:
    将变量常量话,也就说用来修饰一个只读变量;

  •     int const *p;               将指针的指向常量化

  •     int *p;                          将指针的指向常量化

  •     int * const p;              将指针的值常量化

  •     const int *const p;     将指针的值和指向常量化

在CPP中

const成员函数:

  •     用const修饰的成员函数, 在成员函数声明和定义的时候,在函数头的后面添加const;

  •     在const成员函数内部,不能直接或者间接的修改对象的值;

  •     在const成员函数内部不能调用非const成员函数,可以调用cosnt成员函数;

  •     const成员函数可以被非const成员函数调用。

 
 const对象:

  •     用const修饰的对象,在创建对象的时候,需要将其进行初始化,后续不能来修改对象的      值;

  •     const对象不能调用非const成员函数,避免间接修改cosnt对象的值;

  •     cosnt对象,只能调用cosnt成员函数;

 const成员变量:

  •     用const修饰的成员变量,在创建对象的时候,需要将对应的const成员变量进行初始           化,后续不能来修改成员变量的值;

  •     onst成员变量初始化的时候,只能通过参数列表传递初始化值;

  •     const成员变量的值,在对象创建后,不能修改其值。

【TC3xx芯片】TC3xx芯片UCB详解 TC3xx芯片UCB详解 阅读详情

相关推荐

多思计算机组成原理实验:模型机课程设计

计算机组成原理实验教程 基于多思网络虚拟实验系统 张雯雰

Nick的博客 2万+

cpp——类——析构函数

概述 析构函数特点: 函数名为“~类名”,用来标记和识别析构函数 没有返回值,析构函数是对自身的销毁行为,返回值无意义,因为没有返回值的接收者 形参列表为空,所以析构函数没有重载,唯一的 构造函数VS析构函数: 构造函数是对自身的初始化,生成(定义)对象时自动调用 析构函数是对自身的销毁,销毁对象时自动调用 辅助类 class CAnimal { public: CAnimal() : mGroup(0) { cout << "CAnimal()" << endl;

mardax的专栏 3000

GD32重映射实战:从部分映射到完全映射的配置解析

本文深入解析GD32微控制器的重映射功能,以定时器1的PWM通道为例,详细阐述了从部分映射到完全映射的实战配置流程。文章重点介绍了AFIO模块的核心作用、配置寄存器操作以及关键的避坑指南,旨在帮助开发者灵活优化PCB布局并解决引脚资源冲突,从而高效利用芯片外设功能。

k6l7m8n9的博客 694

C++类中的静态成员变量和静态成员函数的作用

数据成员可以分为静态变量、非静态变量两种。 静态成员:静态类中的成员加入static 修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态成员,因为静态成员存在于内存,所以非静态成员可以直接访问类中的静态成员。 非静态成员:所以没有加static的成员都是非静态成员,当类被实例化后,可以通...

afl291529699的博客 994

AI:Coze、Dify、n8n:三款低代码工具如何选?

Coze、Dify、n8n:三款低代码工具如何选?

Kant2048的博客 2806

RK3588 Linux启动优化至亚秒级全链路剖析

本文深入探讨RK3588平台Linux系统启动加速技术,涵盖从BL1/ATF安全固件、U-Boot剪裁到内核精简化等全链路优化方案,实现从上电到用户脚本800ms内完成的实战经验。​​文末提供完整解决方案获取方式​​。由于在 ARMv6 之后引入了 TrustZone 模块, 目前市面上 ARMv7 和 ARMv8 之后的系统都会包含了该模块, 这个模块由 BL1 启动, 且在 ATF(ARM Trust Firmware) 固件中, 既安全世界中引导到 BL33 (UBOOT)的系统。

韩若明溪 1777

21. C++外部静态类

在类或者结构体外定义一个静态变量或者静态函数,意味着定义的函数和变量只对它的声明所在的cpp文件(编译单元)是“可见“的。

WX_Chen的博客 1839

uni-app 实现高德 / 百度 / 腾讯地图多端导航跳转(H5最全方案)

本文介绍了一套生产级可复用的多地图导航Hook封装方案。针对开发中常见的经纬度顺序混乱、中文乱码、参数不统一等问题,提供了统一解决方案。方案支持高德、百度、腾讯三大地图平台,封装了各平台的URI参数处理逻辑,包括坐标顺序转换、名称编码、导航模式适配等核心功能。通过组合式API设计,开发者只需调用统一入口即可实现多地图导航跳转,同时保留单独调用各平台的能力。文中还总结了6大常见坑点,并推荐默认使用高德地图作为最稳定的导航方案。该方案适用于车辆定位、物流配送等多种业务场景,可封装为可复用的Hooks组件。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 537

C++复习之路:1.Static、const相关:作用,使用场景,struct和class

作用: Static用于定义静态变量,包括全局和局部的静态变量,两者的共同点: 都存储在内存中的静态存储区; 都是整个程序结束后才会被释放,否则一直存在,尤其是多次调用时,新一次的调用的初始值为上一次调用后的结果; 不同点: 全局静态变量作用域为从定义之处到文件结尾,而局部静态变量作用域为定义之处开始到函数结束,但是函数结束后该局部变量在内存中并不会被销毁,等再次调用该函数时可以继续访问。 2.Static用于定义静态函数; 作用于整个.cpp文件中,一般定义于cpp头部; 好处:不同cpp文件中

weixin_42067304的博客 1572

Nexys4DDR+OV7670实现图像灰度显示系统嵌入式

通过对硬件平台的准备、Vivado工程配置、OV7670驱动程序的编写、图像灰度处理算法的设计以及系统集成与测试,我们成功实现了一个基于嵌入式系统的图像处理应用。当系统运行时,OV7670摄像头模块将采集到的图像传输到FPGA芯片中,然后通过图像灰度处理算法将彩色图像转换为黑白图像,并在显示设备上进行显示。OV7670摄像头模块的驱动程序是实现图像采集的核心。以上代码中,我们使用了Xilinx提供的XGpio和Xil_In32函数来进行OV7670摄像头数据的读取和GPIO的初始化。OV7670驱动程序。

WangWEel的博客 338

ROS2入门到精通—— ROS2实战专栏(实时更新)

Nav2专栏介绍

BigDavid123的博客 2370

C++—19、C++ 中静态存储static

当我们把static.cpp文件里的static去掉。编译运行发现有一个重复定义的变量,如下图:可以看到在linking阶段有个link错误。因为s_Variable已经在另一个编译单元里定义了,所以两个全局变量的名字不能一样。类型特点函数内部静态变量在函数体内,静态变量具有记忆功能,即一个被声明为静态的变量只会被初始化一次,然后在这一函数被调用的过程中其值维持不变文件内静态变量用来限制变量或函数的作用域为当前文件。

Growthofnotes的博客 1176

LDRA Testbed(TBrun)软件单元测试_操作指南

通过前面的几篇文章,使用Testbed进行软件静态分析的内容已经基本讲解完毕。从这篇文章开始,将继续讲解如何使用TBrun进行软件单元测试、软件集成测试。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 7771

C++:类和对象全解

本文全面介绍了C++中类和对象的核心概念与使用方式。文章首先从类的定义入手,详细讲解了成员变量(属性)和成员函数(方法)的声明与封装特性,强调了访问修饰符private的作用。然后通过实例化对象的两种方式(普通构造函数和初始化列表),深入分析了对象创建过程的内存分配机制。 在类的补充部分,作者对比了class与struct的默认权限差异,解释了类域的概念及作用域操作符的使用方法,并通过代码示例演示了类大小的计算规则和空类的大小特性。关于this指针,文章剖析了其底层实现原理和在成员函数中的隐式调用机制。 最

2301_81454749的博客 2405

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

cpp类与对象

c++类与对象

w3367738546的博客 1982

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

运算符重载

小羊的博客 2449

老版QQ原生表情gif动态

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

const与static的区别

对于C/C++来说,就是只读的意思,只在声明中使用,意即其所修饰的对象为常量((immutable)),它不能被修改,并存放在常量区。一般有两个作用,规定作用域和存储方式(静态存储)。对于局部变量,static规定其为静态存储方式每次调用的初始值为上一次调用后的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见,对于static函数也是如此。static修饰的变量如果没有初始化,则默认为0.

量变产生质变 1万+

C++ 类与对象(最全超详细)

本文系统介绍了C++类与对象的核心知识,包括:1. 基础概念:类定义、封装特性、对象实例化原理、this指针的作用及const成员函数;2. 六大默认成员函数:构造函数(含初始化列表)、析构函数、拷贝构造(区分深浅拷贝)、赋值重载等实现要点;3. 高级特性:static成员、友元机制、内部类、匿名对象及类型转换规则。全文通过Date和Stack类示例,详细解析了面向对象封装特性的实现方法,强调构造函数初始化列表、深拷贝等关键知识点,为后续继承和多态学习奠定基础。建议读者通过实现日期类来巩固所学内容。

我们无法预测机会什么时候降临,所以我们能做的只有努力! 2501

C/C++中const、static与宏定义对比

本文对比分析了C/C++中const、static和#define的特性差异。在C语言中,const仅表示只读变量,不具备编译时常量属性;static控制作用域和生命周期;#define是主要的常量机制。C++中const成为真正的编译时常量,static扩展了类内支持,#define主要用于宏替换。关键区别包括:C++的const默认内部链接、可作编译期常量,而C语言不具备这些特性;C++的static支持类成员。现代C++建议用const/constexpr替代宏,利用static管理类共享数据

弘羽 1310

C++面向对象编程:从类与对象到static、const关键字深度解析

面向对象编程(OOP)是一种将数据与操作数据的方法捆绑在一起的编程范式,其核心思想是通过封装、继承和多态来构建模块化、可复用的代码。在C++中,类作为对象的蓝图,定义了数据成员和成员函数,而对象则是类的具体实例,拥有独立的状态。通过public和private关键字实现封装,可以保护数据完整性并隐藏实现细节,这是OOP的重要特性之一。static关键字用于定义属于类本身的成员,而非某个特定对象,常用于实现对象计数器或共享数据。const关键字则用于保证数据或函数的不变性,提升代码的健壮性和可读性。这些概念共

weixin_34033624的博客 483

【C++】类和对象中的static和const

文章讲了一下static和const两个关键字在类和对象中的使用,文章不长,内容也很简单。

Ye_Ming_OUC的博客 1522

C++中的const static this

前面我们说到了C++中的类创建,其中类包括了函数,变量,以及构造函数,但是和C语言当中一样,我们对变量和函数有const和static修饰,在C语言当中我们用const修饰变量表示不可修改的变量,那么在C++中是不是也是这样呢?明确告诉大家,有共同点也有不同点,大多是不同的

2301_78622258的博客 1385

day5 C++ 类中的const static

day5 了解类中的const static const 1、const修饰数据成员 与类外部数据一致,即认为此数据成员不可改变。 在参数列表(构造函数)位置初始化

filan的博客 2563

Cpp-类和对象

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

ahojcn 的博客 1896

C++ 虚析构virtual、static关键字、const关键字

文章目录 一.虚析构 1.写法 : 2.什么时候用到虚析构 二.c++ static关键字作用 1.static 特点 : 2.static修饰成员属性 3.static 修饰成员方法 三. c++ const关键字作用 1.const 修饰成员属性 2.const 修饰的成员方法 3.const修饰成员方法 C语言const与C++const不同点

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 704

C++学习:类和对象

在C++中struct与class都可以用来表示类,但在C++中还是以class为标准为好,至于为什么别急,下面会提到。//在C++中并不推荐//存放成员变量以及成员函数的类体//后面的分号记住一定不能丢//存放成员变量以及成员函数//后面的分号记住一定不能丢看上去定义的操作基本差不多,但其实他们还是有一定的差别的,下面就让我们用一些例子来给大家演示一下,以更好的理解它们的区别,这里我们将函数在类中的声明与函数的定义分开,再进行相关的操作:Strack.h:我们在该文件中声明函数。

m0_73984165的博客 1018
上一篇: 免费PPT模板下载(毕业设计答辩,毕业设计开题答辩)
下一篇: Linux内核原码下载(官网地址,对各个模块做了相应的解释)
JIANXIN.Y
博客等级 码龄9年 273粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值