c++中::和.区别

2023-05-16

在C++中,"::"和"."都是用于访问类的成员(包括成员函数和成员变量)的运算符,但它们有一些重要的区别。

"::"被称为作用域解析运算符,用于访问全局作用域、命名空间和类的静态成员。例如,假设有一个名为"MyClass"的类,它有一个名为"myStaticVariable"的静态变量,那么可以使用"::"来访问它,如下所示:

MyClass::myStaticVariable;

另一个例子是,假设有一个名为"myNamespace"的命名空间,其中包含一个名为"myVariable"的变量,那么可以使用"::"来访问它,如下所示:

myNamespace::myVariable;

"."用于访问类的非静态成员。例如,假设有一个名为"MyClass"的类,它有一个名为"myMemberVariable"的非静态变量和一个名为"myMemberFunction()"的成员函数,那么可以使用"."来访问它们,如下所示:

MyClass obj;
obj.myMemberVariable;
obj.myMemberFunction();

需要注意的是,"."只能用于访问对象的成员,而"::"可以用于访问类和命名空间的静态成员,也可以用于访问全局作用域的变量和函数。

在C++中,静态变量是指在程序生命周期内只被初始化一次的变量。与普通变量不同,静态变量的生命周期与程序的整个运行期间相同,它们在程序开始运行时被初始化,在程序结束时被销毁。静态变量可以在函数内或类中定义。

在函数内部定义的静态变量将保持其值,直到程序退出为止,它们被初始化为零或与表达式相关的值,只在函数首次调用时进行初始化。例如,下面的代码定义了一个名为"count"的静态变量,它的值将一直保留在程序的整个运行期间:

void myFunction()
{
    static int count = 0; // 静态变量
    count++;
    std::cout << "count is: " << count << std::endl;
}

int main()
{
    myFunction(); // 输出 count is: 1
    myFunction(); // 输出 count is: 2
    myFunction(); // 输出 count is: 3
    return 0;
}

在类中定义的静态变量可以被所有类对象共享,它们的内存空间只在程序启动时分配一次,并且可以在类的成员函数之外进行初始化。例如,下面的代码定义了一个名为"count"的静态变量,它被所有MyClass对象共享:

#include <iostream>

class MyClass
{
public:
    static int count; // 静态变量
};

int MyClass::count = 0; // 在类外初始化静态变量

int main()
{
    MyClass obj1;
    MyClass obj2;

    obj1.count++;
    obj2.count++;

    std::cout << "obj1.count is: " << obj1.count << std::endl;
    std::cout << "obj2.count is: " << obj2.count << std::endl;
    std::cout << "MyClass::count is: " << MyClass::count << std::endl;

    return 0;
}

这个程序中,类MyClass定义了一个静态变量count,并在类外初始化为0。在main()函数中,创建了两个MyClass类的实例obj1obj2,并通过obj1.count++obj2.count++递增了静态变量count的值。

接着,程序使用std::cout输出了三个值:obj1.countobj2.countMyClass::count。由于静态变量是所有实例共享的,因此它们的值应该是相等的,都为2。运行程序后,输出应该是:

obj1.count is: 2
obj2.count is: 2
MyClass::count is: 2

最后,程序返回0表示正常结束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++中::和.区别 的相关文章

随机推荐

  • 微信登录老是间歇式失败

    在微信小程的开发中 xff0c 登录问题 xff0c 一定要按照这样的顺序 1 小程序请求login xff0c 拿到code 然后传给服务端 xff1b 2 服务端拿到code 到微信服务器拿到sessionKey xff1b 3 然后小
  • Python爬虫编程7——多线程爬虫

    目录 一 多线程基本介绍 程序中模拟多任务 二 多线程的创建 三 主线程与子线程的执行关系 四 查看线程数量 五 线程间的通信 xff08 多线程共享全局变量 xff09 六 线程间的资源竞争 互斥锁和死锁 互斥锁 死锁 七 Queue线程
  • 嵌入式蓝桥杯客观题总结(4.19)

    1 DMA xff08 1 xff09 DMA是否需要经过MCU访问内存 xff1f xff08 2 xff09 在STM32处理器中一个DMA请求 xff0c 至少占用 xff08 xff09 个周期的CPU访问系统总线时间 A 1 B
  • PixHawk 4用作四旋翼DIY调试部分笔记

    PixHawk 4用作四旋翼DIY调试部分笔记 序所使用的设备器件问题整理短暂结语 序 这是用于记录DIY组装的基于PixHawk 4的四旋翼时所遇到的部分有趣的而又比较耗时才能查找或者仍未能查找到解决方案 xff0c 自行针对当下所处环境
  • CentOS虚拟机可以ping通主机,但是主机ping虚拟机请求超时解决办法

    我用ssh连不上虚拟机 xff0c 找了好多博客 xff0c 试了好多方法 xff0c ip都背得了 xff0c 方法也都差不多千篇一律 xff0c 还是没能解决 xff0c 卡了我好几个小时 xff0c 最后在一次无意的尝试中解决了 xf
  • 麦克纳姆轮PID控制原理

    目录 前言 一 什么是麦克纳姆轮 二 运动原理 三 pid控制 一 什么是pid xff1f 二 什么是串级PID xff1f 三 麦克娜姆轮的控制思想 总结 前言 目前很多大学生比赛里面经常都会出现麦克娜姆轮 xff0c 并且麦克娜姆轮在
  • Matlab在线运行网址

    下载正版matlab麻烦 xff0c 耗内存 xff0c 在线的matlab运行器不香吗 xff1f 在线运行网址 打开后是这样的一个界面 然后我们把左边框的内容换成自己的代码之后点击Execute运行就可以在右边显示代码的运行结果了
  • 《手把手教你学嵌入式无人机》——入门航模遥控器使用(MC6C)

    一 MC6C入门航模遥控器简介 六通道MC6C迈克遥控器是普遍使用的一款入门航模遥控器 xff0c 价格较为低廉 xff0c 同时性能比较稳定 xff0c 性价比较高 遥控器与接收机 1 基本参数 xff1a 遥控器 xff1a 遥控范围
  • (一)Jetson Agx Xavier 装系统Ubuntu

    买不到nvidia Agx Xavier 所以用的是rtimes代替 目前是暑假打算做一辆无人车玩玩 拿到手后和树莓派 TX2感觉很像 xff0c 可以直接插鼠标键盘 显示器网线等还是很方便 虽然不是原厂 xff0c 看手册应该是 nvid
  • (三)Jetson Agx Xavier 串口使用

    暂时没有需要串口的地方 xff0c 不过先写在这备用 xff0c 主要就是配置一下 dev ttyTHS1这里的串口 xff0c 波特率 xff0c 奇偶校验这些 xff0c 比较简单 xff0c 和正常的电脑配置串口差不多 uart py
  • Ubuntu18.04实现ROS安装及小海龟实例

    目录 一 ROS简介1 含义2 发展 二 ROS安装1 添加软件源2 添加密钥3 安装ROS4 初始化rosdep5 设置环境变量 三 小海龟实例1 运行小海龟2 话题器查看节点信息3 控制量移动海龟4 C 43 43 程序编写小海龟圆形
  • iviewadmin本地调试线上接口

    修改vue config js文件 xff1a devServer proxy 39 adminapi 39 target 39 这里写自己的域名 api 39 changeOrigin true pathRewrite function
  • ESP32之FreeRTOS--任务的创建和运行

    文章目录 前言一 创建任务和删除函数1 xTaskCreate 2 xTaskCreateStatic 3 xTaskCreateRestricted 4 vTaskDelete 二 任务函数和任务控制块TCB1 任务函数模板2 TCB 三
  • Linux之V4L2驱动框架

    目录 一 V4L2简介 二 V4L2操作流程 1 打开摄像头 2 查询设备的属性 能力 功能 3 获取摄像头支持的格式 4 设置摄像头的采集通道 5 设置 获取摄像头的采集格式和参数 6 申请帧缓冲 内存映射 入队 xff08 1 xff0
  • C语言 多个文件同时使用一个全局变量

    在做嵌入式实验时 xff0c 需要在多个文件中修改同一个全局变量实现程序控制 xff0c 方式如下 xff1a 在某个头文件中声明全局变量 例 xff1a 文件名 xff1a status h span class token macro
  • Java实现简单赛事通知(大二水平)

    目录 前言 代码 总结 前言 实验目的与要求 了解接口与多态的应用场景 xff0c 熟练掌握接口的定义与实现类的编写 xff0c 了解面向对象的设计原则 xff0c 能够灵活应用接口 继承和组合构建更具弹性的软件架构 xff0c 初步体验面
  • 字符串赋值指针变量与普通变量的区别

    普通变量和指针变量用字符串赋值时是有区别的 特别是数组与字符串 xff0c 数组名本质上是数组的首地址 在对指针 数组 xff08 名 xff09 用字符串同样如此 xff0c 赋值时同样为首地址 对于普通变量 xff0c 赋值操作实际上是
  • C语言中 井号#、双井号##

    在 C 语言中 xff0c 井号 34 34 是一个预处理器指令的符号 xff0c 用于在编译之前处理代码 预处理器指令以 34 34 开始 xff0c 以换行符结束 常见的预处理器指令包括 xff1a include xff1a 包含一个
  • C++中的双冒号::

    在C 43 43 中 xff0c 双冒号 xff08 xff09 被用作作用域解析运算符 类作用域解析运算符 在C 43 43 中 xff0c 如果要在类的定义外部定义或实现成员函数或静态成员变量 xff0c 则必须使用双冒号运算符来引用类
  • c++中::和.区别

    在C 43 43 中 xff0c 34 34 和 34 34 都是用于访问类的成员 xff08 包括成员函数和成员变量 xff09 的运算符 xff0c 但它们有一些重要的区别 34 34 被称为作用域解析运算符 xff0c 用于访问全局作