【C++】成员属性为什么不能直接初始化 静态成员属性为什么要类外部定义(初始化) 您所在的位置:网站首页 静态私有成员变量初始化 【C++】成员属性为什么不能直接初始化 静态成员属性为什么要类外部定义(初始化)

【C++】成员属性为什么不能直接初始化 静态成员属性为什么要类外部定义(初始化)

2023-07-22 09:33| 来源: 网络整理| 查看: 265

C++对象成员属性为什么不能声明时初始化,C++静态成员属性外部定义原因 struct和class的区别C++对象成员属性为什么不能声明时初始化C++静态成员属性外部定义原因

struct和class的区别

首先struct肯定都知道,是用于声明结构体的,在C++中struct和class概念是相同的 虽然概念是相同的,但是还是有一些区别: 1 .默认继承权限:如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理; 2. 成员的默认访问权限:class的成员默认是private权限,struct默认是public权限。

C++对象成员属性为什么不能声明时初始化

既然struct和class概念是相同的,那么class也是用于声明,声明并非是定义,声明并不会为其开辟存储空间也就无法存储数据,所以在类中只能声明成员变量无法在声明时赋初值

与struct相同,类的定义实际上相当于是类型的声明,并没有分配存储空间,初始化后的数据没有地方存放,类实例化以后才会有实体存储地址以及空间目前在C++11标准允许在类定义时初始化非静态数据成员了 C++静态成员属性外部定义原因

在一个类中,若将一个成员变量声明为static,这种成员称为静态成员变量。 在这里插入图片描述 c++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类外全局作用域下初始化,且不能使用static关键字。

首先const静态类成员由于被const修饰所以作为常量不占有内存,所以可以在类中初始化静态变量,是在编译阶段就分配空间,对象还没有创建时,就已经分配空间,在类构造中可以初始化(定义)静态成员(由于静态成员在对象没有创建前即可调用,所以再构造函数中初始化静态变量,当没有创建对象就使用静态成员时,会发生找不到定义错误,且每次定义都会改变静态变量)静态成员变量在类中仅仅是声明,没有定义所以没有分配空间,也就无法存储初始化的数据,所以要在类的外面定义,实际上是给静态成员变量分配内存。(不定义会发生“未定义的引用”错误)如果类外定义函数时在函数名前加了static,因为作用域的限制,就只能在当前文件里用,类本来就是为了给程序里各种地方用的,其他地方使用类是包含类的头文件,而无法包含类的源文件,这样就导致无法在其他地方调用这个静态的类成员函数。静态成员变量存储在全局区中(为了方便在其他文件中调用类成员),所以在类外定义静态成员变量时,只能在全集作用域下定义,且不能加static关键字


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有