C++中类成员变量的初始化问题】的更多相关文章

引子:我们知道,C++中类成员变量的初始化顺序与其在类中的声明顺序是有关的. 先看代码: class TestClass1 { public: TestClass1() { cout << "TestClass1()" << endl; } TestClass1(const TestClass1&) { cout << "TestClass1(const TestClass1&)" << endl; }…
C++11之后允许对非静态成员变量进行初始化(in-class initialization),不过对于非fundamental(非基本数据)类型需要采用的是initializer_list来实现的 所以如下代码是错误的: class A{ public: ; string s="qweqetfqw"; vector<,);//这句错了,vector不是基本数据类型,必须用大括号初始化 }; 改成下面这样就正确了: class A{ public: ; string s=&quo…
一. 定义处默认初始化vs构造函数中初始化 java中类成员变量支持在声明处初始化,也可以在构造函数中初始化,那么这两者有什么区别呢?看下面例子 public class FieldsInit { public static void main(String[] args) { Test test = new Test(); } } class Print { public Print(String s) { System.out.println(s); } } class Test { pri…
问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void Print(){ cout << "n1:" << n1 << ", n2: " << n2 <<endl; } }; int main() { A a; a.Print(); return 1; }…
代码如下 1.局部变量,报错!!! public void test(){ int i; System.out.println(i); } 2.成员变量,输出0 int i; @Test public void test(){ System.out.println(i); } 之前一直有疑问,但是也不知道具体是什么原因,今天看了thinking in java大致就了解了: 其实说到底还是java规范,因为java规定要这样就必须这样==. 原理就是,java规定,所有变量在使用之前要保证是经过…
类中被final修饰的成员变量需要初始化,否则编译不通过,因为final修饰后不能再赋值,因此必须初始化.…
转载链接:https://blog.csdn.net/qq_37059483/article/details/78608375 1.成员变量在使用初始化列表初始化时,只与定义成员变量的顺序有关,与构造函数中初始化成员列表的顺序无关.因为成员变量的初始化次序是根据变量在内存中次序有关,而内存中的排列顺序早在编译期就根据变量的定义次序决定了.这点在EffectiveC++中有详细介绍. 2.如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关. 3.注意:类成员在定…
本文转自:C++类中成员变量的初始化总结 1. 普通的变量:      一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行.  1 class CA   2 {   3 public:   4      int data;   5 public:   6      CA();   7 };   8      9 CA::CA():data(0) //……#1……初始化列表方式  10 {  11     //data = 0;//……#1……赋值方…
题目显示不全,完整题目描述: (1)定义一个Person类,其中包括:1.定义属性:姓名:年龄:民族作为成员变量.定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化.3.定义多个方法:分别显示相应的属性值,例如getName(){System.out.print("名称="+name+":"); }4.定义一个方法"成长":实现年龄的增加,每执行一次年龄增加1.5.定义一个静态方法"显示人数":显示当前的人数. (2…
没有父类的情况 1,静态代码块-->静态成员变量-->成员变量(实例属性)-->代码块-->构造函数 2, 静态代码块 和 静态成员变量 只会初始化一次 有父类的情况 1,父类非Object 静态成员变量 -- > 静态代码块 代码块-->成员变量(实例属性)-->构造函数 2, 父类是Object (其实相当于没有父类) 成员变量(实例属性)-->代码块-->构造函数 静态代码块 -->静态成员变量 基本所有的这一块度可以用上面的总结来判断(个…
结论:执行的大致顺序如下, (1) 在一个不存在继承的类中:初始化static变量,执行static初始化块-->初始化普通成员变量(如果有赋值语句),执行普通初始化块-->构造方法 (2)在一个存在继承的类中:初始化父类static成员变量,运行父类static初始化块-->初始化子类static成员变量,运行子类static初始化块-->初始化父类实例成员变量(如果有赋值语句),执行父类普通初始化块-->父类构造方法-->初始化子类实例成员变量(如果有赋值语句)及普…
一个变量作为类成员使用的时候,如果没有被初始化,java会为其分配默认值: ----------------------------------------------------------------------------------------- Boolean false Char '\u0000'(null) byte (byte)0 short (short)0 int 0 long 0L float 0.0f double 0.0d -----------------------…
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/cs…
一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: 先按照静态成员变量的定义顺序在类内部声明成员变量. 再按照原java类中对成员变量的初始化顺序进行初始化. 一个java类和编译后的class对应的转换如下: 源文件: public class Person{ public static String name="张三"; public…
这是在面试中遇到的一个问题,没有答出来,后来上网上查了一些资料,终于弄明白了: 一.首先c++标准规定成员变量必须在调用构造函数前进行初始化(这一点很重要) 二.如果我们在构造函数中对成员变量进行初始化,那么在进入构造函数之前,编译器会调用该成员变量的默认构造函数对成员变量进行初始化,当进入构造函数后,我们对成员变量初始化又会调用复制构造函数,之前的编译器调用的默认构造函数等于浪费了,它做了无用功,降低了效率. 三.如果我们用参数列表的形式对成员变量进行初始化,就不会调用成员变量的默认构造函数了…
C++成员变量.构造函数的初始化顺序 一.C++成员变量初始化 1.普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行 2.static 静态变量(本地化数据和代码范围): static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个.在这种性质上理解,有点类似于全局变量的唯一性. 函数体内static变量的作用范围时该函数体,不同于auto变量,该变量内存只被分配一次,因此其值在下次调用时维持上次的值…
一.C++成员变量初始化 1.普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行 2.static 静态变量(本地化数据和代码范围): static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个.在这种性质上理解,有点类似于全局变量的唯一性. 函数体内static变量的作用范围时该函数体,不同于auto变量,该变量内存只被分配一次,因此其值在下次调用时维持上次的值. 在模块内的static全局变量可以…
由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void Print(){ cout << "n1:" << n1 << ", n2: " << n2 <<endl; } }; int main() { A a; a.Print(); return 1; } 这时,那个…
java中成员变量的初始化,如果是普通成员变量可以赋初值,如果没赋初值,则系统会自动赋初值.而对于局部变量必须手动赋初值. package MyText2; public class MyText1 { int str1; public static void main (String []args) { MyText1 mytext = new MyText1(); System.out.println(mytext.str1); } } 输出结果: 0 也可以声明时直接赋初始值. packa…
首先根据下面的这个一段代码:引入关于java初始化顺序的问题public class InitationTest extends Person { public InitationTest() { System.out.println("InitationTest constructor"); } static int j = 10; static { System.out.println("j="+j); System.out.println("Init…
当创建一个对象时,各种成员变量及构造方法的初始化或调用顺序是怎样的呢? (1).如果类尚未加载,则先初始化静态成员变量和静态代码块,再初始化成员变量,最后调用相应的构造方法: (2).如果类已经加载过了,则静态成员变量已经初始过了,静态代码块也已执行,这时只需初始化成员变量,再调用构造方法就可以了: (3).如果类还有父类,则按(1)或(2)的顺序先初始化父类,再初始化子类. 下面以例子详细说明. 包human中定义了四个类,分别为Person.Student.DustMan.TestMain:…
有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同.这些特殊的类型的成员变量包括: a.引用 b.常量 c.静态 d.静态常量(整型) e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化.    静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末. 参考下面的代码以及其中注释:#include <iostream>using namespace std; class BClass{public: BClass…
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(…
看到了C++11,看到了XE7的64位,想实现下面方便的类成员初始化,失望. 一.64位用法 clang3,64位编译器,不支持中文变量名,编写代码提示没有32位快,风格简单不用写单独的赋值语句函数,一步到位,c#,java都支持的写法. class TTableNames64 { public: String TB1 = "TB1"; String TB2 = "TB2"; // String 变量a; // error 汉字变量不识别 } TableNames6…
参考资料: 1.黄邦勇帅 2.http://blog.163.com/sunshine_linting/blog/static/448933232011810101848652/ 3.http://www.cnblogs.com/zhoug2020/archive/2012/08/31/2665451.html 一.初始化列表 1.假如定义了类 www 则 www::www (int i, int j, int k):x (i), y(j), z(k){},定义了一个带 i,j,k 三个参数的构…
最近在学习c++,不同类型的c++成员变量在初始化的时候也有很有的区别,查了一些资料之后再此记录一下: #include<iostream> using namespace std; //c++ 类成员变量初始化总结 class Test { private: int var1;//普通变量 int &var2;//引用类型 const int var3;//常成员 static int var4;//静态成员 static const int var5;//静态常成员 有资料说可以在…
C++ static.const和static const 以及它们的初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的具体对象相关的.即使没有具体对象,也能调用类的静态成员函数和成员变量.一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中. 在C++中,static静态成员变量不能在类的内部初始化.在类的内部只是声明…
成员变量和局部变量(2) 成员变量的初始化和内存中的运行机制         当系统加载类或者创建类的实例的时候,系统会自动为成员变量分配内存空间,并自动指定初始值. package object; public class Person { //定义一个静态的变量 public static String city; //定义一个非静态的变量 public String name; public static void main(String[] args) { /*当person类加载的时候…
原文链接:http://www.orlion.ga/1237/ 类的成员变量在PHP中本质是一个变量,只是这些变量都归属于某个类,并且给这些变量是有访问控制的. 类的成员方法在PHP中本质是一个函数,只是这个函数以类的方法存在,他可能是一个类方法也可能是一个实例方法,并且在这些方法都加上了类的访问控制.类的成员方法是现实世界实体行为的抽象,可以用来实现类的行为. 一.成员变量 成员变量在编译时已经注册到了类的结构中.在编译时类的声明编译会调用zend_do_begin_class_declara…
public class Init { private int age;//非静态初始化语句<3> private static String name; //静态初始化语句,先初始化静态 <1.1> /**静态初始化语句和静态初始化模块都是静态(同等级),谁在前面先初始化谁*/ {/**动态初始化模块(非静态初始化模块)<4>*/ double width; float price; System.out.println("父类非静态"); } s…