当前位置: 首页 > web >正文

C++学习之类与对象

        经过C++入门的学习后,可能各位读者大大对于C++语法部分的内容仍然有一些困惑,但是没关系,经过后面的学习我们会对前面的内容有更好的了解。

        在本篇文章中,我们会学习C++的另一个重要的部分——类与对象。

类的定义

        类定义的格式

        class为定义类的关键字,Stack为类的名字,{}中为类的主题,注意类定义结束时后面分号不能省略(与C中的结构体变量)。类体中内容称之为类的成员;类中的变量称之为类的属性或成员变量;类的函数称之为类的方法或者成员函数。

        为了区分成员变量,一般习惯上成员变量会加上一个特殊标识,比如成员变量前面或后面加_或者_m等。这并不是C++的规定,具体看项目组和公司的要求。

        C++中struct也可以定义为类。C++兼容struct的用法,同时struct也升级为了类,很明显的变化是struct也可以定义函数。(不过我们推荐用class定义类)

        定义在类中的成员函数默认为inline

        下面就是一个定义类的结构示例

class stack 
{//成员变量int x;int arr[100];//成员函数void init(){//code}
};

        访问限定符

        C++一种实现封装的方式就是用类将对象的属性和方法结合到一起,让对象更加完善,通过访问权限接口选择性的将其接口提供给外部函数使用。

        

        public修饰的成员在类外可以直接访问;protected和private修饰的成员在类外不能直接被访问。在目前的章节我们认为protected和private,后续的学习才能体现出它们的区别。

        访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现位置,如果后面没有访问限定符,作用域就到},即类结束。

下图中两段代码是等效的。

        class定义成员没有被访问限定符修饰的时候默认为private,struct默认为public。

        举例说明:下图两段代码等效

且结果相同

        一般成员函数变量都会被限制为private/protected,需要给别人使用的成员函数会放为public。

        定义在类里面的函数就是内联函数。

类域

        在C++入门C++学习记录:C++入门-CSDN博客的命名空间片段中我们知道类域属于命名空间的一部分,接下来我们将就类域进行详细地叙述。

        目前我们知道的有四个域:局部域全局域、类域和命名空间域。命名空间域和类域不影响声明周期,只解决各自命名冲突(类域解决互相之间的命名冲突,命名空间域解决全局的命名冲突)

        类定义了一个新的作用域,类的所有成员都在类的作用域中,在类体外定义成员的时候,需要使用::作用域操作符指明成员属于哪个类域

        如果声明与定义分离,可以按如下方式去指定的类域寻找init函数,在预处理处包含<stack.h>(举例说明的)
            如果声明与定义分离,可以按如下方式去指定的类域寻找init函数,在预处理处包含<stack.h>(举例说明的)

void stack::init();//去指定的类域中寻找init函数

       类域解决了类与类之间的命名冲突。命名空间域是解决全局空间的函数/变量/类型的命名冲突。

        类域影响的是编译的查找规则。比如在下图的程序中init如果不指定类域stack,那么编译器就会把init当成全局函数,那么编译时,找不到array等成员的声明/定义在哪里,就会报错。指定类域stack,就是知道init是成员函数,如果当前域找不到,就回去类域当中寻找

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class stack
{
public://成员函数void init(int n = 4);
private://成员变量int* array;size_t capacity;size_t top;
};
void stack::init(int n)
{array = (int*)malloc(sizeof(int) * n);if(nullptr == array){perror("malloc申请空间失败");return;}capacity = n;top = 0;
}int main()
{stack st;st.init();return 0;
}

http://www.xdnf.cn/news/1029.html

相关文章:

  • Redis的数据持久化是怎么做的?
  • 【无人机】问题分析。查看电机转速时,四个电机转速不一致,QGC中检测到电机转速不均衡
  • webpack详细打包配置,包含性能优化、资源处理...
  • 简述大疆无人机对接
  • Python爬虫从入门到实战详细版教程
  • 【AI提示词】投资策略专家
  • 蓝耘平台介绍:算力赋能AI创新的智算云平台
  • Android RecyclerView 多布局场景下的设计思考:SRP 与 OCP 的权衡与优化
  • 服务网格在DevOps中的落地:如何让微服务更智能、更稳定?
  • 597页PPT丨流程合集:流程梳理方法、流程现状分析,流程管理规范及应用,流程绩效的管理,流程实施与优化,流程责任人的角色认知等
  • Python+区块链:如何打造智能化资产管理系统?
  • [预备知识]3. 自动求导机制
  • 探秘 SenseGlove Nova 2力反馈手套,解锁 VR 键盘交互新方式
  • WebGis与WebGL是什么,两者之间的关系?
  • DeepSeek系列(5):助力数据分析
  • ClickHouse 设计与细节
  • linux sysfs使用cat无显示的原因:返回值未赋值
  • 一图掌握 C++ 核心要点
  • android Stagefright框架
  • 模数转换【1】AD7699
  • 【C++篇】string类的终章:深浅拷贝 + 模拟实现string类的深度解析(附源码)
  • 使用tabs组件搭建UI框架
  • SPI通信
  • 7. 深入Spring AI:刨析 Advisors 机制
  • 4月21日日记
  • vue2解析html中的公式,使用vue-katex
  • 科学养生指南:解锁健康生活新方式
  • 强化学习框架verl源码学习-快速上手之如何跑通PPO算法
  • 【C++11】线程库、锁、条件变量、原子操作
  • Kubernetes相关的名词解释Containerd(14)