C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)

别再瞎调了!STM32 Systick延时函数避坑指南(正点原子、野火、慧净代码对比) 本文深入解析STM32 Systick延时函数的实现差异与优化策略,对比正点原子、野火、慧净等主流方案的优缺点。针对us和ms级延时精度问题,提供避坑指南和高级优化技巧,帮助开发者根据项目需求选择最佳方案,提升嵌入式系统的定时控制精度。 阅读详情


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭
❤~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:C/C++

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

​​

​​

目录

类的访问限定符及封装

访问限定符

public(公有):

protected(保护):

private(私有):

【访问限定符说明】

封装

案例:

类的作用域

类的实例化

类对象模型

如何计算类对象的大小

类对象的存储方式

结构体内存对齐规则

this指针

this指针的引出

this指针的特性

案例分析:

this指针存在哪里?

this指针可以为空吗?


类的访问限定符及封装

访问限定符

在面向对象的编程中,封装是一个核心概念,它隐藏了对象的内部实现细节,只对外提供必要的接口。封装通过访问限定符来控制类成员的访问权限,从而实现数据的隐藏和保护。

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

C++ 中有三种访问限定符:

public(公有):

成员在类的内部和外部都可以被访问。

protected(保护):

成员在类的内部和派生类(子类)中可以被访问,但不能在类的外部直接访问。

private(私有):

成员只能在类的内部被访问,不能在类的外部或派生类中直接访问。

【访问限定符说明】

1. public修饰的成员在类外可以直接被访问
2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4. 如果后面没有访问限定符,作用域就到 } 即类结束。
5. class的默认访问权限为private,struct为public(因为struct要兼容C)
注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

封装

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

封装本质上是一种管理,让用户更方便使用类。

案例:

计算机作为复杂设备,其设计体现了高度的封装性。

用户只需通过开关机键、键盘输入、显示器和USB插孔等外部接口与计算机交互,完成日常任务。计算机内部的核心部件如CPU、显卡、内存等,则隐藏在机壳内部,用户无需关心其详细设计或工作原理。这种设计使得计算机易于使用,同时保护了内部复杂结构的安全性和稳定性。

在C++语言中实现封装,可以通过类将数据以及操作数据的方法进行有机结合,通过访问权限来隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用。

类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。

在类体外定义成员时,需要使用 ::作用域操作符指明成员属于哪个类域。

class Person
{
public:
 void PrintPersonInfo();
private:
 char _name[20];
 char _gender[3];
 int  _age;
};
// 这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo()
{
 cout << _name << " "<< _gender << " " << _age << endl;
}

类的作用域还涉及到类的成员在何处可以访问和使用。具体来说,某个类A中某个成员M在以下情况下具有类A的作用域:

  1. 该成员(M)出现在该类的某个成员函数中,并且该成员函数没有定义同名标识符。

  2. 该类(A)的某个对象的该成员(M)的表达式中。例如,a是A的对象,则在表达式a.M中,M具有类A的作用域。

  3. 在该类(A)的某个指向对象指针的该成员(M)的表达式中。例如,Pa是一个指向A类对象的指针,则在表达式Pa->M中,M具有类A的作用域。

  4. 在使用作用域运算符所限定的该成员中。例如,在表达式A::M中,M具有类A的作用域。

类的实例化

用类类型创建对象的过程,称为类的实例化

类是对象的模板或定义,它描述了对象的属性(成员变量)和方法(成员函数),但不分配实际内存来存储实例化的数据。

通过类可以创建多个具有相同结构和行为的对象。这些对象会占用实际的物理空间来存储它们各自的属性值。

例如:

  • 学生信息表可以被视为一个类,定义了学生应具有的基本信息字段。而每个具体的学生记录就是该类的一个对象,它包含了这个学生的具体信息并占用内存空间。
  • 谜语和谜底的关系是一个很好的类比,谜语描述了谜底的特征,而谜底则是符合这些特征的具体实例。

在代码中,我们不能直接通过类名来访问或修改对象的成员变量,因为类本身并不存储具体的实例数据。

我们需要先创建类的实例(即对象),然后通过该对象来访问或修改其成员变量。

类与对象的关系可以比作建筑设计图与实际建筑的关系。

设计图(类)定义了建筑的结构和样式,但没有实际的建筑存在。只有当按照设计图进行建造(实例化)时,才会产生实际的建筑(对象),它占用物理空间并具有具体的形态和功能。

 类-->对象     ——     1-->多

类对象模型

如何计算类对象的大小

类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?如何计算一个类的大小?

运行结果: 

类对象的存储方式

类中既有成员变量,又有成员函数

class A1 {
public:
    void f1(){}
private:
    int _a;
};

对于类 A1,它有一个私有成员变量 _a(类型为 int)和一个公有成员函数 f1()。由于成员函数不占用类实例的内存空间(它们通常存储在代码段中,而不是数据段中),所以 A1 类实例的大小只与成员变量有关。在大多数系统上,一个 int 类型的成员变量通常占用 4 个字节(但这不是绝对的,取决于平台和编译器)。因此,sizeof(A1) 应该是 4(或可能是 4 的倍数,取决于内存对齐)。

类中仅有成员函数

class A2 {
public:
   void f2() {}
};

类中什么都没有---空类

class A3
{};

对于类 A2 和 A3,它们没有成员变量,只有成员函数。如前所述,成员函数不占用类实例的内存空间。然而,对于空类,编译器通常会为其分配至少一个字节的大小,以确保每个对象在内存中都有一个唯一的地址。因此,sizeof(A2) 和 sizeof(A3) 都应该是 1(或可能是 1 的倍数,取决于内存对齐和编译器的实现)。但在实践中,某些编译器可能会为空类分配更大的大小,以确保对象之间的内存地址有足够的间隔,这被称为“空基类优化”。

结论:一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。

结构体内存对齐规则

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

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

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

3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。

4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍

现在,关于结构体内存对齐的问题:

  1. 结构体怎么对齐?:结构体对齐是为了满足处理器访问内存时的效率问题。当处理器从对齐的地址处读取数据时,通常比从非对齐的地址处读取数据要快。此外,某些硬件平台可能根本不支持非对齐的内存访问。​​​​​​​

  2. 为什么要进行内存对齐?:如上所述,内存对齐可以提高处理器访问内存的效率,并避免在某些硬件平台上出现错误。

  3. 如何让结构体按照指定的对齐参数进行对齐?:在 C++ 中,可以使用 alignas 关键字或特定的编译器指令(如 GCC 的 __attribute__((aligned(n))))来指定结构体的对齐参数。

  4. 能否按照3、4、5即任意字节对齐?:是的,但需要注意的是,对齐参数应该是 2 的幂,并且小于或等于平台支持的最大对齐值。此外,过小的对齐值可能不会带来性能上的好处,而过大的对齐值可能会浪费内存。

  5. 什么是大小端?:大小端是指多字节数据在内存中的存储顺序。大端模式(Big-Endian)是指数据的高位字节存储在内存的低地址处,而数据的低位字节存储在内存的高地址处。小端模式(Little-Endian)则相反,数据的低位字节存储在内存的低地址处,而数据的高位字节存储在内存的高地址处。

  6. 如何测试某台机器是大端还是小端?:可以通过检查一个整数类型(如 int)的字节顺序来测试机器的大小端。一种常见的方法是创建一个整数,其高位字节设置为 1,其他字节设置为 0,然后检查该整数在内存中的地址处存储的值。

  7. 有没有遇到过要考虑大小端的场景?:在处理跨平台的数据交换、网络通信或文件存储时,经常需要考虑大小端问题。因为不同的硬件平台可能使用不同的大小端模式,所以必须确保数据在发送和接收时的大小端一致性。

class A4
{
//private:
    char _ch;、
    int _i;
};
int main()
{
    cout<< sizeof(A4)<< endl;
    return 0;
}

不对齐就是五个字节,对齐就是八个字节

this指针

this指针的引出

class Date
{ 
public:
     void Init(int year, int month, int day)
     {
         _year = year;
         _month = month;
         _day = day;
     }

 void Print()
     {
         cout <<_year<< "-" <<_month << "-"<< _day <<endl;
     }

private:
     int _year;     // 年
     int _month;    // 月
     int _day;      // 日
};

int main()
    {
         Date d1, d2;
         d1.Init(2022,1,11);
         d2.Init(2022, 1, 12);
         d1.Print();
         d2.Print();
         return 0;
    }

对于上述类,有这样的一个问题:

Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?

在C++中,当你有一个类(比如Date类)并且这个类有成员函数(比如Init和Print),编译器确实为每个非静态成员函数增加了一个隐藏的指针参数this。这个this指针指向调用该成员函数的对象的地址。

当你创建Date类的两个对象d1和d2,并分别调用它们的Init函数时,编译器会自动将this指针设置为指向当前对象(d1或d2)的地址。这样,在Init函数的函数体内,所有对成员变量的操作都是通过这个this指针来完成的,从而确保了对正确对象的操作。

这个过程对用户(即程序员)来说是透明的,你不需要显式地传递this指针或进行任何特殊的操作。编译器会自动处理这一切。

在C++中,编译器为每个非静态成员函数隐式地传递一个名为this的指针,该指针指向调用该函数的对象。

这使得成员函数能够知道它们应该操作哪个对象的数据成员。这个过程对用户是透明的。

this指针的特性

1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。

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

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

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

案例分析:

class A
{ 
public:
    void Print() 
   {    
        cout<<"printf()"<<endl;   //正常运行
   }
private:
 int _a;
};
int main()
{
    A* p = nullptr;
    p->Print();
    return 0;
}

cout<<"printf()"<<endl;        //正常运行 

在这段代码示例中,尽管 p 是一个指向 A 类对象的空指针(nullptr),但调用 p->Print(); 似乎可以成功执行,并且不会立即导致程序崩溃。这是因为 Print 函数是一个不依赖于 this 指针中存储的对象状态(即不访问任何成员变量)的成员函数。

在 C++ 中,成员函数通常通过 this 指针隐式地访问对象的成员。然而,如果成员函数不访问任何成员变量(也不调用其他访问成员变量的成员函数),那么实际上并不需要有效的 this 指针。在大多数现代编译器和硬件上,这样的调用可能不会立即导致崩溃,因为 this 指针通常只在函数内部需要访问成员变量时才会被使用。

但是,这并不意味着通过空指针调用成员函数是安全的或推荐的做法。尽管在的例子中 Print 函数能够执行,但这样做是未定义行为(Undefined Behavior, UB),并且可能导致不可预测的结果,包括(但不限于)程序崩溃、数据损坏或安全漏洞。

未定义行为意味着 C++ 标准没有规定在这种情况下程序应该如何表现。不同的编译器、不同的编译器设置、不同的操作系统或硬件架构都可能导致不同的结果。因此,我们应该始终避免通过空指针调用成员函数。

此外,一些编译器或编译器的优化设置可能会检测到这种潜在的未定义行为,并发出警告或错误。例如,使用某些静态分析工具或编译器的更严格的警告级别可能会帮助识别这种问题。

class A
{ 
public:
    void PrintA() 
   {    
        cout<<_a<<endl;     //运行崩溃
   }
private:
 int _a;
};
int main()
{
    A* p = nullptr;
    p->PrintA();
    return 0;
}

而在这段代码中,程序崩溃的原因是解引用了一个空指针 p 来调用 PrintA 成员函数。即使 PrintA 函数不直接访问 _a 成员(实际上它是通过 this 指针隐式访问的),但调用成员函数本身就需要一个有效的对象实例。

在 C++ 中,当你有一个指向对象的指针,并试图通过该指针调用成员函数时,编译器会生成代码来隐式地传递一个指向该对象的 this 指针给成员函数。然而,如果指针是 nullptr(或称为空指针),那么 this 指针就会是无效的,尝试通过它访问成员会导致未定义行为,通常表现为程序崩溃。

在这段代码中,p 被初始化为 nullptr,这意味着它并不指向任何有效的 A 类对象。

然后,尝试通过 p->PrintA(); 调用 PrintA 成员函数。

由于 p 是空的,this 指针也是无效的,因此程序崩溃。


this指针存在哪里?

this 指针是 C++ 编译器在调用成员函数时自动添加的一个隐式参数。它实际上是一个指向调用该成员函数的对象(或类的实例)的指针。这个指针并不是真正存储在对象本身的内存布局中,而是在成员函数被调用时,由编译器在函数调用栈帧(stack frame)中创建并管理的。

所以this指针是存在栈(stack)里的!

在成员函数内部,你可以通过 this 指针来访问或修改对象的成员变量。尽管在源代码中你并不会显式地看到 this 指针的传递和使用,但编译器会在编译时为你处理这些细节。

this指针可以为空吗?

this 指针本身在成员函数被调用时总是指向一个有效的对象(除非是通过某种非常规的方式调用成员函数,比如直接通过函数指针调用且没有正确的对象上下文)。然而,你不能显式地将 this 指针设置为 nullptr 或其他无效地址,因为 this 指针是由编译器管理的,而不是由程序员直接控制的。

但是,有一种情况需要注意:当你通过空指针(nullptr)来调用成员函数时,虽然技术上你并没有直接操作 this 指针,但这种行为是未定义的,并且很可能导致程序崩溃。这是因为即使函数体内不直接访问任何成员变量,成员函数被调用时仍然需要一个有效的 this 指针来作为上下文。当这个上下文不存在(即你试图通过一个空指针来调用成员函数)时,程序的行为就是未定义的。

所以,虽然不能直接设置 this 指针为空,但必须确保在调用成员函数时所使用的对象指针是有效的。

​​

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

新手必看!一步步教您如何获取可用的D音Cookie(为什么我复制的D音Cookie无法正常使用?) 新手必看!一步步教您如何获取可用的抖音Cookie(为什么我复制的抖音Cookie无法正常使用,无法下载无水印视频?) 阅读详情

相关推荐

Linux系统下奥比中光Astra Pro相机SDK部署与避坑指南

本文详细指导了在Linux系统下部署奥比中光Astra Pro深度相机SDK的全过程,涵盖系统准备、SDK安装、设备权限配置及常见问题排查。重点解析了USB设备规则配置这一关键步骤,并提供了Python与C++项目的集成方法,旨在帮助开发者快速完成相机配置,避免常见陷阱。

weixin_28455801的博客 300

【C++初阶】三、类和对象(面向过程、class类、类的访问限定符和封装、类的实例化、类对象模型、this指针)

C++类和对象:面向过程和面向对象初步认识 ;类的引入 -- struct类 ;类的定义 -- class类 ;类的访问限定符和封装 ;类的实例化 ;类对象模型 ;this指针

正在努力学C呀!(要学好久呢......) 3345

告别轮询!手把手教你用S32K3的FlexCAN Enhanced FIFO+DMA实现高效CAN FD数据接收

本文详细介绍了如何利用S32K3芯片的FlexCAN Enhanced FIFO与DMA组合方案,实现高效CAN FD数据接收,彻底告别传统轮询和中断模式。通过深度缓冲、智能过滤和DMA联动技术,该方案在5Mbps高负载场景下将CPU占用率从42%降至3%以下,显著提升系统实时性和吞吐量。

weixin_30906185的博客 503

《C++初阶之类和对象》【类 + 类域 + 访问限定符 + 对象的大小 + this指针】

本片博客中详细的讲解了C++类和对象中的:类的定义和实例化、类域、访问限定符、对象的大小、this指针的语法知识点、使用场景、常见注意事项等。

序属秋秋秋的博客 1956

KG²RAG框架:知识图谱增强大模型检索生成技术解析

知识图谱(Knowledge Graph)作为结构化知识表示的重要方式,与向量检索技术结合形成了新一代检索增强生成(RAG)框架。其核心原理是通过图神经网络编码器提取子图特征,并与文本向量空间对齐,实现结构化与非结构化知识的协同检索。这种技术显著提升了专业领域问答的事实准确性,在医疗诊断、金融分析等需要高可靠性响应的场景中具有重要价值。KG²RAG框架创新性地采用双通道处理架构,结合Neo4j等图数据库与Milvus向量数据库,通过动态检索调度器智能选择最优检索路径。实测表明该方案能降低40%以上的事实错误

weixin_29306875的博客 107

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识,起步是晚了一点,但好歹是开了个头。下面就借助TransFusion论文及其开源代码来串一串这方面的知识。这个很好理解,参考FPointNet网络图示。就是利用现有的2D检测器在图像上提取2D初始框,根据Camera成像原理,捕获2D框视锥内的点云,再利用点云分类模型(如:PointNet)做进一步分类。

4964

【C++】类与对象【定义、访问限定符、this指针】

💬 hello!各位铁子们大家好哇。今日更新了类与对象的定义、访问限定符、this指针的内容。

qinjh_的博客 1403

【2025CVPR】基于脉冲神经网络的能效目标检测模型:Multi-scale Spiking Detector(MSD)深度解析

本文提出了一种创新的多尺度脉冲神经网络目标检测器(MSD),通过生物启发的ONNB模块和MSDF框架实现了高效准确的目标检测。该模型采用端到端直接训练策略,在COCO数据集上达到62.0%mAP的精度,同时仅需7.8M参数和6.43mJ能耗,较传统方法提升2.8%精度并降低82.9%能耗。实验验证了其在小目标检测和事件数据处理的优越性,为边缘计算应用提供了新范式。

hasakie的博客 1109

【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)

关于类入门的基本内容到这里就结束了,本篇博客对面向对象编程做了基本的介绍,介绍了类的基本定义方式和使用方法,访问限定符以及面向对象三大特性之一的封装,探讨了类的底层存储方式,实例化方式,最后还讲到了特殊的this指针。C++中通过类可以将数据 以及 操作数据的方法进行完美结合,通过访问权限可以控制那些方法在类外可以被调用,即封装,在使用时就像使用自己的成员一样,更符合人类对一件事物的认知,大大方便了编程。

2303_79329831的博客 2493

基于Spring Boot 3 + Vue 3 + UniApp的全栈高校社团管理小程序设计与实现

requestMatchers("/api/auth/**", "/doc.html", "/webjars/**", "/v3/api-docs/**").permitAll() // 公开接口。<u-search placeholder="搜索活动" v-model="searchKeyword" @search="loadActivities" :showAction="false"></u-search>R.success("活动创建成功") : R.error("活动创建失败");

2201_76125393的博客 369

万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

C++波澜壮阔40年| 类与对象(上)篇:类的封装、实例化与 this 指针详解

介绍了类的相关概念、类的实例化、this指针的机制

晨非辰的学习记录博客~~ 1770

31、MSP430FR2355时钟系统与低功耗模式解析

本文详细解析了MSP430FR2355的时钟系统和低功耗模式。首先介绍了时钟系统的组成,包括XT1振荡器、DCO、MODCLK、MCLK、SMCLK和ACLK的功能与配置方法。接着探讨了MSP430FR2355的五种低功耗模式及其配置要点,并分析了时钟系统与低功耗模式之间的协同关系。最后通过实际应用案例展示了如何在具体场景中优化系统功耗。文章旨在帮助开发者充分利用MSP430FR2355的时钟与低功耗特性,实现高性能、低功耗的嵌入式系统设计。

mars5的博客 196

【C++】第三节—类和对象(上)——(类、类的实例化、this指针、C++实现的Stack)

1.1 类定义格式1.2 访问限定符public1.3 类域类域比较短小的函数就在类里面去定义,默认是内联函数,长一点的函数不在类里面去定义在类外面去定义,在.cpp文件里面去定义,做函数声明和定义的分离。下面展现的就是标准的类的声明和定义分离。

稻草人 5934

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Re:从零开始的 C++ 入門篇(四)类和对象·第一篇:定义、访问限定、对象大小、this指针

本文介绍了C++面向对象编程中类与对象的基础知识。主要内容包括:1. 类的定义与成员变量/函数的声明方式,以及访问限定符(public/private)的使用规范;2. 类实例化的概念,对象内存布局和大小计算的内存对齐规则;3. this指针的工作原理及其在成员函数调用中的隐式传递机制;4. 通过栈的实现对比展示了C++封装特性相较于C语言的优势。文章还穿插了常见面试题解析和编码规范建议,为后续深入学习面向对象编程打下基础。

小此方的博客 1966

STM32F407中文手册

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

C++初阶类与对象(一):学习类与对象、访问限定符、封装、this指针

1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 3.1类的结构 3.2类的两种定义方式 3.21声明和定义全部放在类体中 3.2.2声明和定义分开 3.3成员变量命名规则的建议 4.类的访问限定符及封装 4.1访问限定符 4.2封装 5.类的作用域 6.类的实例化 7.类对象模型 7.1类对象的存储方式 7.2结构体内存对齐规则 8.this指针 8.1this指针的引出 8.2 this指针的特性 8.3经典问题

qq_74415153的博客 1346

【C++类和对象】类和对象的引入

C++中通过类可以将数据以及操作数据的方法进行完美结合,通过访问权限可以控制哪些方法在类外可以被调用,即封装,在使用时就像使用自己的成员一样,更符合人类对一件事物的认知。

Renswc的博客 2673

类于对象(上)--- 类的定义、访问限定符、计算类和对象的大小、this指针

在本篇中将会介绍一个很重要和很基础的Cpp知识——类和对象。对于类和对象的篇目将会有三篇,本篇是基础篇,将会介绍类的定义、类的访问限定符符和封装、计算类和对象的大小、以及类的 this 指针。

m0_74830524的博客 1902

《吃透 C++ 类和对象(上):封装、实例化与 this 指针详解》

本文详细介绍了C++中类和对象的核心概念,通过大量代码示例讲解了类定义、访问限定符、实例化、this指针等关键知识点。主要内容包括:1. 类定义的两种方式(class和struct)及其区别;2. 访问限定符(public/private/protected)的作用和使用规范;3. 类实例化的过程和对象内存分配原理;4. this指针的底层实现机制;5. 通过C与C++实现Stack的对比,展示面向对象编程的封装特性。文章包含多个测试题目和详细注释的代码示例,帮助读者深入理解类和对象这一C++核心概念,为后

会当凌绝顶,一览众山小 1834

【C++修行之道】类和对象(一)、类的定义、类的访问限定符及封装、类的作用域 、类的实例化、类对象模型 、this指针

类体(类域):由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。在类中定义一般情况下,更期望采用第二种方式。注意:上课为了方便演示使用方式一定义类,大家后序工作中尽量使用第二种。// 我们看看这个函数,是不是很僵硬?

走在努力路上的自己的博客 1337

【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)

类的本质是一种自定义类型,是定义对象模板的蓝图或者结构。它制定了对象可以包含的数据以及该对象可以执行的操作。在某种程度上,c++中的类可以认为是c语言结构体的升级版,不仅可以在其中定义成员变量,也可以定义成员函数,用于对成员变量进行访问或操作。

2301_80955819的博客 1662

【是C++,不是C艹】 类与对象 | 认识面向对象 | 访问限定符 | 封装 | this指针

这期博客是类与对象的第一篇,我将带大家认识面向对象,类的定义,类的使用,有关类的探讨,最后分别以C语言和C++实现一遍Stack,通过对比让大家感受感受类的优势。

Welcome to Claffic's blog ! ! ! 1564

C++ 类和对象(上)——类和对象的概念 类的限定符 this指针

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字className为类的名字{}中为类的主体注意类定义结束时后面分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1.声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2.声明放在.h文件中,类的定义放在.cpp文件中(一般采用)

rwh04160416的博客 1752

【C++】类和对象(上)—— this指针

C++类和对象详细解析,手把手⚡弄懂重点,手撕✅面试真题,真的不点进来看看吗?

qq_42996461的博客 1835

【C++】:类和对象(上)+ this指针

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号注意:class默认成员都是私有的(private)class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

优快云官方认证C/C++研发领域优质创作者 优快云官方2023年成都赛道Top3 第16届蓝桥杯C/C++软件赛四川赛区二等奖 带你玩转C/C++ 数据结构与算法 Linux系统编程/Linux网络编程 MySQL数据库 软件测试开发 1397

【C++】类与对象(引入)

类与对象的入门介绍✨✨

Lin_Alpaca的博客 2356

【C++】类和对象(上篇)——类的定义,访问限定符与this指针

C 语言和 C++ 最大的区别就是一个面向过程,一个面向对象。而提到面向对象就不得部提到类,这一篇文章,我们主要探讨一下 C++ 中类的定义以及一些基本的权限。

qq_62306969的博客 1088
上一篇: C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)
下一篇: 智能创作时代:AI引领下的内容生产革命与效率提升
Srlua小谢
Srlua小谢 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域
博客等级 码龄4年 8963粉丝 332原创
评论 64
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值