C++成员变量的初始化

Cpp -C++类中成员变量的初始化总结 1. 普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。 class CA { public: int data; public: CA(); }; CA::CA():data(0) //……#1……初始化列表方式 { //data = 0;//……#1……赋值方式 };2、static 静 阅读详情

1、普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。 

class CA

{

public:

CA();

……

public:

int data;

……

};

CA::CA():data(0)//……#1……初始化列表方式

{

//data = 0;//……#1……赋值方式

};

2、static 静态变量:

static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个。在这种性质上理解,有点类似于全局变量的唯一性。

class CA

{

public:

static int sum;

……

public:

CA();

……

};


int CA::sum=0;//……#2……类外进行初始化

3、const 常量变量:

const常量需要在声明的时候即初始化。因此需要在变量创建的时候进行初始化。一般采用在构造函数的初始化列表中进行。

class CA

{

public:

const int max;

……

public:

CA();

……

};

CA::CA():max(100)

{

……

}

4、Reference 引用型变量:

引用型变量和const变量类似。需要在创建的时候即进行初始化。也是在初始化列表中进行。但需要注意用Reference类型。

class CA

{

public:

int init;

int& counter;

……

public:

CA();

……

};

 

CA::CA():counter(&init)

{

……

}

5、const static integral 变量:

对于既是const又是static 而且还是整形变量,C++是给予特权的(但是不同的编译器可能有会有不同的支持,VC 6好像就不支持)。可以直接在类的定义中初始化。short可以,但float的不可以哦。

// 例float类型只能在类外进行初始化

// const float CA::fmin = 3.14;

class CA

{

public:

//static const float fmin = 0.0;// only static const integral data members can be initialized within a class

const static int nmin = 0;

……

public:

……

};


总结起来,可以初始化的情况有如下四个地方:

1、在类的定义中进行的,只有const 且 static 且 integral 的变量。

2、在类的构造函数初始化列表中, 包括const对象和Reference对象。

3、在类的定义之外初始化的,包括static变量。因为它是属于类的唯一变量。

4、普通的变量可以在构造函数的内部,通过赋值方式进行。当然这样效率不高。


类的定义体中只能初始化const integral data型的量。对于static型的量,那就放在.cpp文件中吧!当然了,还不能放在成员函数中,因为static量是类的,不是某个对象的。那样的话每个对象都来操作属于所有对象(类)的东西,岂不是会乱套,所以不能允许这种行为。
但是,static量可以在类的构造函数中赋值,当然是不可以放在初始化成员列表中的,可是在构造函数中赋值时不可以使用copy construction,提示这样的错误:
term does not evaluate to a function taking 1 arguments
那么,对于类里面的static函数的声明和定义是这样的:
static
函数的声明可以像普通成员函数一样声明,只是在前面加上一个static关键字。
如:
private
: 
static int GetXYZ();
而在,定义时,像static变量那样,也是不可以加上static关键字,若写成:
static int A::GetXYZ()
{
…………
}
就会提示:
'static' should not be used on member functions defined at file scope
所以应该写成是这样:
int A::GetXYZ()
{//
他是static型函数的性质,就用其他方法来辨别吧,比如在这儿写上:this is a static function
…………
}
至于static函数的使用,可以再你所编写的代码段中这样插入:
………………
A::GetXYZ();   //
可以看出他是类的东东,不是对象的
………………
当然,对于public型的static量(假设叫CString S_str),可以这样使用:
A::S_str = "Hello !";
CString  str = A::S_str;

 

c++成员变量初始化问题 


C++为类中提供类成员的初始化列表

类对象的构造顺序是这样的:

1.类里面的任何成员变量在定义时是不能初始化的。

2.一般的数据成员可以在构造函数中初始化。

3.const数据成员和引用数据成员必须在构造函数的初始化列表中初始化。

4.static要在类的定义外面初始化。 

5.数组成员是不能在初始化列表里初始化的。

6.不能给数组指定明显的初始化。

这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。这个事情似乎说不过去啊?没有办法,我只好转而求助于静态数据成员。

到此,我的问题解决。但是我还想趁机复习一下C++类的初始化:

1.初始化列表:CSomeClass::CSomeClass() : x(0), y(1){}

2.类外初始化:int CSomeClass::myVar=3;

3.const常量定义必须初始化,C++类里面使用初始化列表;

4.C++类不能定义常量数组。



转载声明:http://blog.youkuaiyun.com/codestinity/article/details/6862044


C++(11):成员变量的就地初始化 对于非静态成员,C++11允许在声明成员变量的同时使用'='或'{ }'进行就地初始化。 #include <string> #include <iostream> using namespace std; class Data{ private: int m_d1 = 1; char m_d2 = 'c'; double m_d3{3.14}; string m_d4{"hello"}; public: void pData() { cout<< 阅读详情

相关推荐

反激电源RCD尖峰吸收电路的原理以及调试

反激电源RCD尖峰吸收电路的原理以及调试

mnmmnmn的博客 9251

【基础知识】c++的变量初始化

转载自:https://www.cnblogs.com/caidi/p/9679673.html C++中变量的初始化有很多种方式,如:默认初始化,值初始化,直接初始化,拷贝初始化,列表初始化。 1、默认初始化 默认初始化是指定义变量时 没有指定初值时 进行的初始化操作。 如:int a;这些变量被定义了而没有显式的赋予初值。 特别的,采用动态分配内存的方式(即采用new关键字)创建的变量,不加括号时(如int *p=new int;)也是默认初始化,加了括号(如int *p=new int()

All_In_gzx_cc的博客 1万+

【vivado PG学习】1 PG168:7 Series FPGAs Transceivers官方配置方法学习笔记

介绍: The 7 series FPGAs Transceivers Wizard LogiCORE™ IP 自动创建配置7系列fpga 收发器的HDL封装。向导可以配置一个或多个支持行业主流标准的高速串行收发器。或者从零开始支持各种自定义协议。 功能: 创建配置7系列fpga 收发器的HDL封装。 自动对模拟设置进行配置。 预定义了提供Aurora 8B/10B, Aurora 64B/66B, CEI-6G,DisplayPort, Interlaken, Open Base StationAr..

w0shishabi的博客 5万+

c++类成员变量初始化详解

1.类初始化顺序 当类初始化的时候,会调用其构造函数并进行初始化。当对象结束其生命周期,会调用析构函数进行资源回收。 注意类在调用资深构造函数之前,首先会调用其成员变量构造函数并进行初始化,再进入自身构造函数进行初始化。成员变量的声明顺序,就是初始化顺序。后面我们提到的很多情况就跟这个有关系,后面再进行详细解读。 2.声明时初始化 第一种方式是在成员变量声明时初始化。可以看如下示例。 class D { int a = 10; }; 在声明变量a的时候即给其初始化为10。不过注意这种写法是c++1

bitcarmanlee的博客 2万+

Armbian 国内源一键配置:告别卡顿,加速软件更新

本文详细介绍了如何为Armbian系统配置国内软件源,以解决默认国外源导致的更新缓慢、连接超时等问题。通过手动修改配置文件或使用高效的一键换源脚本,可将源切换至清华大学、阿里云等国内镜像站,实现apt更新与软件安装速度的质的飞跃,让Armbian开发体验更加流畅高效。

weixin_29215815的博客 244

短视频mssdk中get_token协议逆向与加密流程深度解析

本文深度解析了短视频mssdk中get_token协议的逆向分析与加密流程。通过抓包、Frida Hook、静态分析等手段,详细拆解了协议数据的Protobuf结构、设备信息采集来源,并重点剖析了其核心加密链路:zlib压缩、自定义TEA算法与AES-CBC加密,最终实现完整的协议模拟。

flower的专栏 557

C++类中成员变量的初始化总结

1、普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。 class CA{public:int data;……public:CA();…… }; CA::CA():data(0)//……#1……初始化列表方式{//da

yang_lang的专栏 1755

uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available. MDK5.37安装ARM_Compiler_5

MDK5.37安装ARM_Compiler_5 最后一个AC5编译器,从MDK5.37开始,不再默认安装,需要独立安装 ARMCompiler_506_Windows_x86_b960.zip (80.94MB) 否则使用AC5编译代码报错如下: Build started: Project: Project *** Target 'STM3210C_EVAL' uses ARM-Compiler 'Default Compiler Version 5' which is not available. *

mowwwcom的专栏 2万+

C++:08---成员变量初始化方式

成员变量初始化有三种方式: 在构造函数体内赋值初始化 在自定义的公有函数体中赋值初始化(一般用于成员变量的初始化) 在构造函数的成员初始化列表初始化 一、构造函数体内初始化 说明:在构造函数体内的初始化方式,本质是是为成员变量赋值,而不是真正意义上的初始化,这点要特别注意!(下面介绍成员初始化列表时会有演示案例对比说明) class Cperson { private: int ...

董哥的黑板报 2150

逆向分析-SeparationPreview.aip-分色预览-结构分析(一)-x64dbg条件日志打印-命令表达式-PS脚本

从功能上分析,仅显示使用的专色这个功能,并没有触发插件接口。使用X64dbg加载illustrator进程,切换到句柄窗口,在窗口过程中,右键刷新获取界面。在x64dbg中,在UI中可以输入一些条件表达式,能够计算出对应的值,并打印在日志中。常用的,如果非暂停,输出第一个参数。参数二是utf16的指针,utf16@字符串地址,这里的字符串地址为[[ebp-108]]参数一是utf8的,utf8@字符串地址,这里的字符串地址为[ebp-28]从界面上分析,一个颜色列表,及仅显示专色的多选框组成。

插件开发 645

YOLO26改进策略【YOLO和Mamba】| CVPR 2025:EfficientViM 压缩隐藏状态空间进行通道混合、单头设计减少内存操作,提升目标检测效率与精度

本文记录的是利用模块优化的目标检测网络模型。EfficientViM Block(基于隐藏状态混合器的状态空间对偶性模块) 的设计旨在,提升特征提取效率,同时兼顾全局依赖捕捉与局部细节保留。本文将深入研究的原理,并将其应用到中,通过重构特征提取流程、减少内存绑定操作、融合多阶段特征,增强模型在资源受限环境下的检测性能与速度。EfficientViM: Efficient Vision Mamba with Hidden State Mixer based State Space DualityEfficie

Limiiiing的博客 399

c++成员变量初始化

1. #include <iostream> #include <string> using namespace std; class A{ public: int a; string s; }; A a; int main() { //A a; cout<<a.a<<endl; cout<<a.s<<endl; }...

littleflypig的博客 5991

【异常】Cursor报错We‘re having trouble connecting to the model provider. This might be temporary

在使用Cursor编辑器进行AI交互操作时,界面弹出如下报错提示,导致无法正常调用模型服务,影响使用流程:We’re having trouble connecting to the model provider. This might be temporary - please try again in a moment. 该报错核心含义为Cursor编辑器无法正常连接至背后的AI模型服务提供商(如OpenAI、Anthropic等),属于连接类异常,并非编辑器本身运行故障。经排查,该报错不具备破坏性,仅

奶爸的编程之路,也就一周冷个三天 1692

cpp:各种成员变量的初始化

所以我们就一一的来看:在头文件里我们对成员变量做了最大限度的初始化,能指定初始值的就指定了。

trytrytrytrytry1的博客 266

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[C++] 类中成员变量的初始化总结二

C++类中成员变量的初始化总结一三种成员变量初始化位置对于类的成员对象的初始化成员数组的初始化基本类型的成员数组对象成员数组补充一下动态数组的初始化vector作为成员变量的初始化 C++类中成员变量的初始化总结一 以前写过一篇C++类中成员变量的初始化总结一, 现在发现还得在补充一些 三种成员变量初始化位置 对于C++11来说,类的成员变量有三个位置进行初始化: 声明时初始化 初始化列表初始化( 成员变量初始化的顺序是按照在那种定义的顺序) 以下三种情况下必须使用初始化成员列表 一、需要初.

selfsongs 3924

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++11之初始化成员变量

C++98中的成员变量初始化 在声明类的时候,对于静态类型并且是常量类型,同时是枚举或者是整型的变量可以使用=在声明时初始化。 对于不符合上述要求的静态变量可以在类外使用=进行初始化 对于非静态类型可以说个初始化列表进行初始化 使用()对自定义类型进行初始化 使用{}对元素集合统一初始化 C++11中的成员变量初始化在C++11中可以使用=或者{}就地初始化,类似于Java语言。 代码示例stru

StephenZou14的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[C++] 类中成员变量的初始化总结一

[C++] 类中成员变量的初始化总结1、普通的变量2、static 静态变量3、const 常量变量4、Reference 引用型变量5、const static integral 变量总结类中的static成员函数的声明和定义 声明、定义、初始化三个概念的不同: 声明:指定变量的名字和类型,可以多次声明。 定义:为该成员变量分配存储空间,有且仅有一个定义。 初始化:为该成员变量赋初值。 初始化列表初始化( 成员变量初始化的顺序是按照在那种定义的顺序) 以下三种情况下必须使用初始化成员列表 一、需要初始化的

selfsongs 5806

在C++中,成员变量必须在对象构造完成前初始化,但初始化的方式有多种...

在C++中,,但初始化的方式可以有多种,具体取决于成员变量的类型和设计需求。

昊虹AI笔记 1304

C++中成员变量的初始化方法

C++成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括: a.       常量型成员变量 b.       引用型成员变量 c.        静态成员变量 d.       整型静态常量成员变量 e.       非整型静态常量成员变量   对于常量型成员变量和引用型成员变量的初始化,需要通过构造函数初始化列表的方式

oBuYiSeng的博客 820

C++成员变量的初始化方式

1.首先把需要初始化的成员变量分为几类: 变量(int) 静态变量(static int) 常量(const int ) 静态常量(static const int)        2.对应的初始化方式是: 一般变量可以在初始化列表里或者构造函数里初始化,不能直接初始化或者类外初始化 静态成员变量必须在类外初始化 常量必须在初始化列表里初始化 静态常量必须只能在定义

zhubo22的专栏 1284

C++中成员变量的初始化

类成员变量的初始化对于初学者来说是一个头疼的问题,总是记不住XXX类型应该怎样进行初始化。为了解决后顾之忧,今天就把类中所有类型的成员变量的初始化做一个总结。 首先,我们来看看C++的类中都有哪几种类型的成员变量。 [cpp] view plaincopy class test   {          private:     

ysc6688的专栏 504

c++类的成员变量初始化总结

1.c++变量的初始化方式 首先把需要初始化的成员变量分为几类: a.一般变量(int) b.静态成员变量(static int) c.常量(const int) d.静态常量(static const int) 对应的初始化方式是: a.一般变量可以在初始化列表里或者构造函数里初始化,不能直接初始化或者类外初始化 b.静态成员变量必须在类外初始化 c.常量必须在初始化列表里初始...

sinat_39370511的博客 7526

C++11:深刻理解成员变量初始化顺序

类通常由类成员变量和类成员方法组成。类的成员变量又被称为类属性,类的成员方法描述当前类所支持的操作,而操作对象一般也是类的成员变量。由此可以看出类的成员变量,是类定义中最关键所在。本文将重点讨论类成员变量的初始化,包括初始化方法,初始化规则等。

一鸣惊人的博客 4433

C++成员变量初始化

1、普通的变量 一般不考虑啥效率的情况下 可以在构造函数或类内进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。 class CA { public: int data; …… public: CA(); …… }; CA::CA():data(0)//……#1……初始化列表方式 { //data = 0;//……#1……赋值方式 }; 2...

新蛋萝卜的博客 756
上一篇: malloc和new的区别
下一篇: 最小生成树(MST)----普里姆(Prim)算法与克鲁斯卡尔(Kruskal)算法
蜗牛Running
博客等级 码龄12年 61粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值