首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++编译器访问静态成员和访问普通成员的方式有什么不同?

C++编译器访问静态成员和访问普通成员的方式有以下不同:

  1. 静态成员的访问方式:
    • 静态成员可以通过类名直接访问,无需创建类的实例对象。
    • 也可以通过类的对象或指针来访问静态成员,但推荐使用类名访问,以提高代码的可读性和清晰度。
  • 普通成员的访问方式:
    • 普通成员必须通过类的对象或指针来访问,无法通过类名直接访问。
    • 需要先创建类的实例对象,然后使用对象的成员访问运算符"."来访问普通成员。
    • 如果使用指针访问普通成员,则需要使用指针的成员访问运算符"->"来访问。

静态成员和普通成员的不同之处在于静态成员属于类本身,而普通成员属于类的实例对象。静态成员在内存中只有一份拷贝,无论创建多少个类的实例对象,它们共享同一个静态成员。而普通成员在每个类的实例对象中都有一份拷贝,每个对象都有自己的普通成员。

静态成员的访问方式灵活且方便,适用于不依赖于类的实例对象而需要访问类的共享数据或方法的场景。普通成员的访问方式需要先创建类的实例对象,适用于需要访问对象特定数据或方法的场景。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数计算(SCF):https://cloud.tencent.com/product/scf
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse

请注意,以上链接仅供参考,具体产品选择应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++】继承 ⑩ ( 继承机制中 static 静态成员 | 子类中访问父类静态成员方法 )

派生类 ) 共享 ; 2、父类静态成员访问控制权限改变 继承自 父类 静态成员变量 , 仍然遵循 继承中 子类 访问控制特性 , public 公有继承 : 父类成员 在 子类 中 , 访问控制权限...不变 , 共有 保护成员 可以在子类访问 , 私有成员不可在子类中访问 ; 父类中 public 成员 仍然是 public 成员 ; 父类中 protected 成员 仍然是 protected... 保护成员 可以在子类访问 , 私有成员不可在子类中访问 ; 父类中 public 成员 变为 子类中 protected 成员 ; 父类中 protected 成员 仍然是 protected...; 或 对象名.静态成员名 child.c = 30; 方式 , 访问 继承自 父类 静态成员 ; 4、静态成员使用要点 参考 【C++静态成员变量 ( 静态成员变量概念 | 静态成员变量声明 |...int c; }; 然后在外部声明 并进行初始化 , 该步骤作用是 告诉编译器 , 为 静态变量 分配内存 , 否则不分配内存 编译会报错 ; // 声明并初始化静态变量 // 如果没有该操作 ,

35310

c++中对象关系_类对象只能访问该类私有成员

二.类对象关系: 类就是对象抽象化概念,一个类就是一个对象集合总称,通俗来讲就是对象需要什么这个类就提供什么给对象,加入对象需要什么数据这个类就提供什么数据,对象需要什么功能这个类就提供什么功能...: Public访问修饰符:范围:类自己、同一个程序集、同一个项目中、自己紧密关系类。...所有类或成员,任何代码均可访问该项,访问权限最大也就意味着最不安全 Private访问修饰符:范围:私有的,只有类内部可以进行访问,允许一个类将其成员变量成员函数对其他函数对象进行隐藏。...访问权限最小意味着针对于对象自己而言最安全; Protected访问修饰符:范围:受保护、类父类以及子类可以进行访问,允许子类访问基类成员变量成员函数。这样有助于实现继承。...类内嵌类成员,只有派生类可以访问该项; Internal访问修饰符:范围:内部,默认,程序集内部可以访问,允许一个类将其成员变量成员函数暴露给当前程序中其他函数对象。

1.6K10

Roslyn 节点 Span FullSpan 什么区别 准备创建语法树访问语法树访问方法访问表达式不同

本文告诉大家在使用 Roslyn 分析代码时,使用 Span FullSpan 什么区别 在开始读本文之前,希望大家已经了解部分关于 Roslyn 知识,如果是通过搜索进来,大概就是已经知道基础写法了...请看代码 public class DowkurTicesoo : CSharpSyntaxWalker { } 本文说道了这里还没有告诉大家 Span 是什么,这个属性就是对应文本第多少个字符开始字符长度...这里直接就告诉大家如何访问方法,因为只有在方法里面才可以比较直观看到 Span FullSpan 不同 通过重写方法就可以拿到一个类所有方法,请看代码 public override...可以看到 Span FullSpan 一个不同是 Span 是从方法第一个代码字符开始, Span 不同是 FullSpan 是从方法距离上一个代码结束开始字符到方法结束最后字符 访问表达式...\r\n",也就是引号后面多了\r\n换行 不同 实际上在很多方法里,使用 Span FullSpan 都是没有什么区别。

87210

C++11 POD类型

在某些情况下,布局是规范明确定义,但如果类或结构包含某些 C++ 语言功能,如虚拟基类、 虚函数、 具有不同访问控制成员,则不同编译器会有不同布局实现,具体取决于编译器对代码优化方式,比如实现内存对齐...C++给定对象类型取决于其特定内存布局方式,一个对象是普通、标准布局还是POD类型,可以根据标准库函数模板来判断is_trivial,is_standard_layoutis_pod<T...1.普通类型 当类或结构体满足如下几个条件时则是普通类型: (1)没有虚函数或虚拟基类; (2)由C++编译器提默认特殊成员函数(默认构造函数、拷贝构造函数、移动构造函数、赋值运算符、移动赋值运算符析构函数...: (1)没有虚函数或虚拟基类; (2)所有非静态数据成员都具有相同访问说明符; (3)在继承体系中最多只有一个类中有非静态数据成员; (4)子类中第一个非静态成员类型与其基类不同...但是如果派生类第一个非静态成员类型基类相同,由于C++标准要求相同类型对象地址必须不相同,编译器就会为基类分派一个字节地址空间。

1.3K21

CC++面试题之语言基础篇(一)

CC++都有结构概念,但是在C语言中结构只有成员变量没有成员方法,而在C++结构中,它可以自己成员变量以及成员方法。...对于#include ,编译器从标准库路径开始搜索a.h 对于#include "a.h",编译器从用户工作路径开始搜索a.h 导入C函数关键字是什么C++编译时C什么不同...static第三个作用是默认初始化为0.全局变量一样存储在静态数据区。 说说静态变量什么时候初始化? 对于C语言全局和静态变量,初始化发生在代码执行之前,属于编译期初始化。...关键字不同: 内联函数使用 inline 关键字进行声明,而普通函数不需要。 编译时展开: 内联函数在编译时展开,而普通函数则在运行时进行函数调用。...简述C++几种传值方式,区别是什么

20010

C++类初识-了对象之后

乐一乐 问:C++书为什么比C厚那么多? 答:了对象后就是麻烦。 虽然这只是调侃,但不得不承认,C++在语法特性上要比C复杂,因此本文也只是挑选类部分内容来阐述。...来源:公众号【编程珠玑】 网站:https://www.yanbinghu.com 访问控制与封装 前面也说到,类基本思想是数据抽象封装,那么必然一些东西用来控制访问权限。...到这里其实也可以猜想,不同Human对象数据成员不同,但是其普通成员函数都是只有一份。...但是需要特别注意是,C++类允许没有数据成员,那么一个没有数据成员类(没有非静态数据成员变量,没有虚函数,也没有虚基类),大小是多少呢?...为什么呢?C++标准里规定,为了避免不同对象具有相同地址,对象大小不允许为0。

50010

C++基础知识精髓

C++中,结构可作为一种特殊类,它虽然可以包含函数,但是它没有私有或受保护成员C++类中包含私有、公有受保护成员C++类中可定义三种不同访控制权限成员。...静态成员函数没有this指针,不能访问普通成员变量。...友元包括:友元函数、友元类 关键字:friend友元函数: 友元函数特点是能够访问类中私有成员成员函数。友元函数从语法上看,他普通函数相同,即在定义上调用上普通函数相同。...通过对象指针进行普通成员函数调用,仅仅与指针类型有关,而与此刻指针正指向什么对象无关。想要实现当指针指向不同对象时执行不同操作就必须将基类中相应成员函数定义为虚函数。...否则会破坏C++封装特性 * 基类友元函数也不能被继承,友元只是能访问指定类私有保护成员自定义函数,不是被指定类成员,自然不能继承 * 基类与派生类静态成员函数与静态成员是共用一段空间

2K50

C++系列(合集)】特性多又复杂?不存在!——这篇C++大全直接干碎(超级大全,精讲)

本P主要知识点:【缺省函数】【命名空间域】【函数重载】【引用】【C++NULL与空指针区别】【内联函数】【类】【This指针】【const成员/成员函数】【static静态成员 】【explicit...访问限定符限制 三.静态成员函数静态成员函数调用关系 请思考下面的几个问题: 静态成员函数可以调用非静态成员函数吗?...但是一个屋子太多钥匙不太安全,故不要多给钥匙(友元不宜多用) 一.友元函数 友元函数可以直接访问私有成员,它是定义在类外部普通函数,不属于任何类,但需要在类内部声明,声明时需要加friend...,d为拷贝类d1 原因:【使用传值方式编译器直接报错,因为会引发无穷递归调用】(错误方式) 一.什么时候需要自己写拷贝构造函数?...封装,继承,多态 1.封装 1.访问限定符(C++实现封装方式) 2.

14710

C++:05---classstruct

在基类派生类中(派生类友元也可以访问)可以被访问,在类外无法访问 private(私有):只有在类内可被访问,类外子类无法访问 注意事项: 成员不写访问属性时,类默认访问属性为private 与结构体不同...如果 Class A; A obj; 那么sizeof(A)==sizeof(obj) 那么sizeof(A)大小成员大小总和是什么关系呢,很简单,一个对象大小大于等于所有非静态成员大小总和。...2) 编译器优化 因为对于大多数CPU来说,CPU字长整数倍操作起来更快,因此对于这些成员加起来如果不够这个整数倍,可能编译器会插入多余内容凑足这个整数倍,此外,有时候相邻成员之间也有可能因为这个目的被插入空白...基于上述两点,可以说用sizeof对类名操作,得到结果是该类对象在存储器中所占据字节大小,由于静态成员变量不在对象中存储,因此这个结果等于各非静态数据成员(不包括成员函数)总和加上编译器额外增加字节...后者依赖于不同编译器实现,C++标准对此不做任何保证。 C++标准规定类大小不为0,空类大小为1,当类不包含虚函数静态数据成员时,其对象大小也为1。

71630

深度解读《深度探索C++对象模型》之数据成员存取效率分析(二)

普通数据成员访问方式接下来几节讨论都是非静态数据成员情况,非静态数据成员都是存放在对象中,类定义中相同名称数据成员在每个对象中都是相互独立存在。...("x=%d, y=%d\n", x, y);}print函数中可以直接访问数据成员xy,其实它是通过一个隐式对象来访问,这个隐式对象编译器会把它插入到参数中,真实函数声明会被编译器转换为下面的方式...《深度解读《深度探索C++对象模型》之C++对象内存布局》一文中知道了对象静态成员布局,由此也可以知道访问静态数据成员是通过对象首地址(基地址)加上非静态数据成员偏移值得到地址。...如果在一个类中有声明了多个层级,如出现多个public多个private层级,是否将多个相同层级合并在一起也并没有强制规定,在我测试编译器中,是不区分不同层级,是根据类中声明顺序来排列,...存取普通数据成员编译器实现独立类即是不继承其它任何类类,现在来分析一下独立类静态数据成员存取方法及效率,通过对象来存取数据成员通过指针来存取数据成员有没有效率上差别?

12610

深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)

print();请问这两种方式什么区别吗?...成员函数种类非静态成员函数非静态成员函数普通成员函数是一样,它也是被编译器放置在代码段中,且可以像普通函数那样可以获取到它地址。...普通成员函数区别是它调用必须得经由一个对象或者对象指针来调用,而且可以直接访问类中非公开数据成员。...Object::print = 0x1007b3f30printObject = 0x1007b3e70非静态成员函数普通成员函数运行效率上也是一样普通成员函数实现上,对类中成员访问看起来像是要经过指针间接访问...那么静态成员函数存在意义是什么静态成员函数在C++诞生之初是不支持,是在后面的版本中增加进去

21320

深度解读《深度探索C++对象模型》之数据成员存取效率分析(一)

通过对象p来存取成员x通过对象指针pp来存取成员x效率存在差异吗?要搞清楚这个问题,得看具体Point类定义以及成员x声明方式。...这也证明了它跟全局变量,普通静态变量是没有区别的。结论就是,类中静态数据成员存取方式是直接通过一个具体地址来访问,跟全局变量毫无区别,所以效率上也跟访问一个全局变量一样。...通过不同方式存取静态数据成员效率差异访问静态数据成员可以通过类名来访问,如Base::s1,也可以通过对象来访问,如b.s1,甚至是通过指针来访问,如pb->s1。那么这几种访问方式什么差别?...或者说是否有效率上损失?其实这几种访问方式本质上没有任何差别,编译器会转换成如Base::s1一样方式,后面的两种方式只是语法上方便而已,看一下汇编代码就一目了然。...+中几行不同访问方式在汇编代码中都转换为同样代码:lea rsi, [rip + Base::s1]继承而来静态数据成员存取分析我们已经知道类中静态数据成员是跟对象无关,所有的对象都共享同一个静态数据成员

14220

CC++常见面试知识点总结附面试真题—-20220326更新

return 0; } 8. static 什么用途 1). 静态(局部/全局)变量 2). 静态函数 3). 类静态数据成员 4). 类静态成员函数 9....可以通过类名直接调用公有静态成员变量,即不需要通过对象,这一点是普通成员变量所不具备。...静态成员函数可以访问静态成员变量,但是不能直接访问普通成员变量(需要通过对象来访问);需要注意普通成员函数既可以访问普通成员变量,也可以访问静态成员变量; 3)....可以通过对象名直接访问公有静态成员函数; 4). 可以通过类名直接调用公有静态成员函数,即不需要通过对象,这一点是普通成员函数所不具备。...不同点 1). ifndef 由语言本身提供支持,但是 program once 一般由编译器提供支持,也就是说,可能出现编译器不支持情况(主要是比较老编译器)。 2).

1.5K10

C++】类与对象理解学习(下)

放在专栏【C++知识总结】,会持续更新,期待支持 建议先看完 【C++】类与对象理解学习(上) 【C++】类与对象理解学习(中) 本章知识点概括Ⅰ 本章知识点概括Ⅱ ---- 初始化列表...同样,对于自定义类型也会发生隐式类型转换,如下: 但是实际上运行结果是什么呢? 我们会发现编译器并没有调用拷贝构造,这是为什么呢?...关键字,类中只是声明 类静态成员即可用 类名::静态成员 或者 对象.静态成员访问 静态成员函数没有隐藏this指针,不能访问任何非静态成员 静态成员也是类成员,受public、protected...、private 访问限定符限制 我们通过如下案例来更好理解: 不仅如此,静态成员函数不可以访问成员变量,但是,类成员函数可以访问静态成员变量!...也就是说,友元函数会突破private限制, 使普通函数也可以访问类中成员变量。

46730

多态实现-虚函数、函数指针以及变体

将编译时多态称之为静态多态,而将运行时多态称之为动态多态。 静态多态动态多态区别是在什么时候将函数实现函数调用关联起来,是在编译时还是运行时。...,我们知道编译器是通过虚函数表来实现运行时多态操作,那么对于普通成员函数成员函数,编译器行为什么区别呢?...几个形参就写几个符号 从上述规则我们可以看出,C++重载只跟函数名函数参数有关。...效率优化 编译器为了保证运行效率,从各个维度进行优化,将普通成员函数效率优化成与普通函数一致,而对于虚函数效率优化,则相较于普通成员函数,仅仅多了一次虚函数寻址。...本节将从效率优化角度,来分析编译器是如何对普通成员函数虚函数进行优化

90120

C++C++核心编程部分-内存分区模型-引用-函数提高-类与对象-文件操作

,我们统称为成员 属性-成员属性-成员变量 行为-成员函数-成员方法 封装意义二 类在设计时,可以把属性行为放在不同权限下,加以控制 访问权限三种 public——公共权限——成员类内可以访问,...//p1.p_password = 123;private类外无法访问 return 0; } structclass 在C++中structclass唯一区别就是默认访问权限不同。...int age; //静态成员函数也是访问权限 private: static void func() { } }; void test01() { //两种访问方式 //通过对象访问...继承同名静态成员处理方式 问题:继承中同名静态成员在子类对象上是如何进行访问呢? 静态成员静态成员出现同名,处理方式 一致。...,只不过两种访问方式(通过对象类名)。

1.8K00

C++面试题

5. volatile mutable 什么作用 在C++中,mutable是为了突破const限制而设置。...遇到这个关键字声明变量,编译器访问该变量代码就不再进行优化,从而可以提供对特殊地址直接访问。 6. 全局变量和局部变量什么区别?操作系统编译器是怎么知道?...C++空类哪些成员函数 默认构造函数、 默认拷贝构造函数、 默认析构函数、 默认赋值运算符,以及取址运算符 const 取址运算符。 10. 虚函数表属于类还是对象?虚函数表什么内存空间?...静态内存分配动态内存分配有什么区别? 1) 时间不同静态分配发生在程序编译链接时候。 动态分配发生在程序调入执行时候。...2) 空间不同静态分配只能是栈来分配(编译器来完成,比如定义一个局部变量 int b = 1) 动态分配可以是堆分配(malloc分配,需要手动回收内存)或者栈分配(编译器来完成,自动回收内存)

1.7K42

C++必知必会之基础知识-常用关键字(1)

修饰符在C/C++中,修饰符(modifiers)是用于修改基本数据类型关键字,用于改变变量存储方式、作用域或其他特性。 const const关键字是一种修饰符。...这些静态变量不能被其他文件直接访问,因此在不同文件中使用相同名称静态变量不会造成命名冲突。...this指针在成员函数内部自动创建,可以在成员函数中使用,用于访问当前对象成员变量成员函数。 this指针是一个隐式参数,它并不需要显式地传递,编译器会在调用成员函数时自动传递它。...this指针用途:在成员函数中,使用this->可以访问当前对象成员变量成员函数,以区分成员变量函数参数命名冲突。...总之,this指针在C++中是一个非常有用特性,它使得在成员函数中能够轻松访问当前对象成员,并提供了便捷方式来实现方法链式调用。

17540

C++笔试面试题整理

不同编译器不同实现机制,比较常用两种: new 时,在第一个对象前面记录分配了多少对象....C++中const什么作用?至少说明3种 const用于定义常量:const定义常量编译器可以对其进行数据静态类型安全检查。...全局变量和局部变量什么区别?是怎么实现?操作系统编译器是怎么知道?...操作系统编译器通过内存分配位置来知道,全局变量分配在全局数据段并且在程序开始运行时候被加载。局部变量则分配在堆栈里面。 与全局对象相比,使用静态数据成员什么优势? 主要有以下所述两种优势。...静态函数存在意义? 静态私有成员在类外不能被访问,可通过类静态成员函数来访问; 当类构造函数是私有的时,不像普通类那样实例化自己,只能通过静态成员函数来调用构造函数。

2.5K30

C++学习知识点

(2)C++支持多重继承,即子类可以多个父类,而C#不支持多重继承,可用接口来实现,但C++中没有接口类型。 (3)C++中类申明方式不分公有私有,继承时候分公有,私有保护方式继承。...+中结构体structclass唯一区别是默认访问不同,而这里我们不考虑访问问题,所以下面的代码都以struct来演示。...编译器对虚函数处理过程 C++中类数据成员是独立,每申明一次类对象,就会为成员数据分配内存空间,所以成员数据变量存储在对象空间中,成员函数是编译阶段确定存储空间地址,故成员函数对于不同对象是共享...编译器在编译阶段对普通函数采用静态联编方式,即在程序编译连接阶段决定程序中 操作调用(函数调用)与执行该操作(函数)代码段之间映射关系。...为什么基类类型指针在被子类对象赋值后不能访问子类成员函数呢?

1.7K20
领券