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

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

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

54810

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

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

1.7K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    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 都是没有什么区别。

    88910

    C++11 POD类型

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

    1.3K21

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

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

    30810

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

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

    51610

    C++基础知识精髓

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

    2K50

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

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

    25110

    C++:05---class和struct

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

    77030

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

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

    16310

    结合实例深入理解C++对象的内存布局

    通过 GDB 查看对象的内存布局,探讨成员变量、成员方法、虚函数表等在内存中的存储位置和实现细节,帮助大家对 C++ 类成员变量和函数在内存布局有个直观的理解。...不过和成员方法不同的是,第一个参数并不是 this 指针了。在实现上它与普通的全局函数类似,主要区别在于它们的作用域是限定在其所属的类中。...整体布局如下图: 其实 C++ 标准并没有规定在继承中,基类和派生类的成员变量之间的排列顺序,编译器可以自由发挥的。但是大部分编译器在实现中,都是基类的成员变量在派生类的成员变量之前,为什么这么做呢?...我们通过派生类对象访问基类成员与直接使用基类对象访问时完全一致,一个派生类对象的前半部分就是一个完整的基类对象。 对于成员函数(包括普通函数和静态函数),它们不占用对象实例的内存空间。...总结 C++ 的对象模型是一个复杂的话题,涉及到类的内存布局、成员变量和成员函数的访问、继承、多态等多个方面。本文从实际例子出发,帮助大家对 C++ 对象的内存布局有了一个直观的认识。

    56421

    【C++篇】C++类与对象深度解析(四):初始化列表、类型转换和static成员讲解

    与在构造函数体中直接赋值不同,初始化列表可以提高效率,尤其是对于某些特定类型的成员变量,它是唯一可行的初始化方式。...1.1.1 构造函数内部赋值 vs 初始化列表 在C++中,我们有两种主要方式来初始化类的成员变量: 构造函数内部赋值:在构造函数体内给成员变量赋值。...3.2 static 函数 静态成员函数是类的成员函数,但是它与普通的成员函数不同,它不依赖于具体的对象实例,可以通过类名直接调用。...3.5 访问控制与静态成员 静态成员与普通成员一样,也受访问控制修饰符(public、protected、private)的限制。...静态成员与普通成员一样,受访问控制修饰符的限制,可以是public、private或protected。同时,静态成员变量不能在类内初始化,必须在类外进行初始化。

    6800

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

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

    33820

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

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

    17520

    C++初阶

    有多级指针,但是没有多级引用 8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理 9....和class的区别是什么 解答:C++需要兼容C语言,所以C++中struct可以当成结构体使用。...”必须是非静态成员 内置类型和自定义类型在赋值运算符重载 用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。...C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量” 的操作,都是通过该指针去访问。...,全部通吃,正确 A.友元函数不是类的成员函数,就相当于你的朋友再亲密也不是你的家人,既然不是类成员函数,那和普通成员函数调用一样,不需要通过对象调用 B.友元的目的就是为了访问类的私有数据,成员函数可以直接访问类的私有数据

    10210

    C++初阶大全

    有多级指针,但是没有多级引用 8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理 9....和class的区别是什么 解答:C++需要兼容C语言,所以C++中struct可以当成结构体使用。...”必须是非静态成员 内置类型和自定义类型在赋值运算符重载 用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。...C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量” 的操作,都是通过该指针去访问。...,全部通吃,正确 A.友元函数不是类的成员函数,就相当于你的朋友再亲密也不是你的家人,既然不是类成员函数,那和普通成员函数调用一样,不需要通过对象调用 B.友元的目的就是为了访问类的私有数据,成员函数可以直接访问类的私有数据

    5810

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

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

    49530

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

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

    1.6K10

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

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

    96620

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

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

    1.9K00
    领券