c++ 中变量成员的初始化时机】的更多相关文章

代码如下: 注意一下我打断点的位置. 最后的结果: 在程序进入MyTest()的函数体之前,控制台就打印出来了I have been constructed. 即:在进入构造函数的函数体之前,类中的成员变量就已经被初始化了!…
构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据成员没有在构造函数中显示初始化,将执行默认初始化: 1.对于内置类型(如int,double,char,bool等)和复合类型(数组,指针),定义任何函数体之外的内置类型或复合类型变量将被初始化0,对于函数体内的内置类型的对象,若没有初始化,其值是未定义的. 2.具有类类型的成员通过运行各自的默认构…
这是在面试中遇到的一个问题,没有答出来,后来上网上查了一些资料,终于弄明白了: 一.首先c++标准规定成员变量必须在调用构造函数前进行初始化(这一点很重要) 二.如果我们在构造函数中对成员变量进行初始化,那么在进入构造函数之前,编译器会调用该成员变量的默认构造函数对成员变量进行初始化,当进入构造函数后,我们对成员变量初始化又会调用复制构造函数,之前的编译器调用的默认构造函数等于浪费了,它做了无用功,降低了效率. 三.如果我们用参数列表的形式对成员变量进行初始化,就不会调用成员变量的默认构造函数了…
转: Java中非静态成员变量.静态成员变量的初始化时机. 2018年05月22日 11:48:11 SilenceCarrot 阅读数 421   版权声明:技术就要分享才有意思,欢迎大家分享(注明出处),欢迎大家纠错. https://blog.csdn.net/SilenceCarrot/article/details/80403635 Java中非静态成员变量.静态成员变量的初始化时机. 非静态变量 我们在这里分析三种结构,着重分析这三种结构的初始化顺序: 成员变量初始化语句: 成员变量…
Java中的成员初始化顺序和内存分配过程 原帖是这样描述的: http://java.dzone.com/articles/java-object-initialization?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+javalobby%2Ffrontpage+%28Javalobby+%2F+Java+Zone%29&utm_content= 我们这里把问题简化方便分析. 属性.方法.构造方法和自由块都…
类被创建之后的成员的初始化顺序到底是怎么样的? 首先 不考虑继承 package com; public class DemoOne { /** * 关于类的初始化顺序 */ //不考虑继承结构的情况 private static int a=1; private String str="我被赋值了"; static{ //为什么static成员函数不能访问非static变量, 不能调用非static成员函数? //静态代码块独立于对象而存在 不依赖于对象存在 简单来说可以直接以类型名…
继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承.(4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承. 分析以上程序示例,主要疑惑点是“子类继承父类的成员变量,父类对象是否会实例化?私有成员变量是否会被继承?被继承的成员变量…
C++ 类中的static成员的初始化和特点 #include <iostream> using namespace std; class Test { public: Test() : y(1), r(y), d(3){} //对于常量型成员变量和引用型成员变量,必须通过参数化列表的方式进行初始化. ~Test(){} int y; //普通变量成员 int &r; //引用成员变量 const int d; //常量成员变量 static int c; //静态成员变量 stati…
1)const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间 void f1() { ; cout<<x<<endl; } void f2() { ; cout<<y<<endl; y++; } int main() { f1(); f1();//1 const定义的常量在超出其作用域之后其空间会被释放 f2(); f2();//3 static定义的静态常量在函数执行后不会释放其存储空间 } 2)st…
在C++的类中有些成员变量初始化和一般数据类型的成员变量有所不同.以下测试编译环境为: ➜ g++ -v Using built-in specs. COLLECT_GCC=g++ Target: x86_64-linux-gnu gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 测试代码(g++编译通过): #include <iostream> using namespace std; class Test { publi…
C++ static.const和static const 以及它们的初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的具体对象相关的.即使没有具体对象,也能调用类的静态成员函数和成员变量.一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中. 在C++中,static静态成员变量不能在类的内部初始化.在类的内部只是声明…
成员变量:包括实例变量和类变量,用static修饰的是类变量,不用static修饰的是实例变量,所有类的成员变量可以通过this来引用. 类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性.而且所有的实例都可以修改这个类变量的值(这个类变量没有被final修饰的情况),而且访问类变量的时候不用实例,直接用类名.的方式就可以. 成员方法:包括实例方法和类方法,用static的方法就是类方法,不用static修饰的就是实例方法.实例方法必须在创建实例之后才可以调用. 类方法:和类变…
首先要弄清接口的含义. 接口就是提供一种统一的'协议’, 而接口中的属性也属于'协议’中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public static final 的.所以你可以这样写: public static final int i=10; 或则 int i=10;(可以省略掉一部分) 注意在声明的时候要给变量赋予初值 解释: 接口是一套标准,统一的入口. 抽象类是不’完全’的类,相当于是接口和具体类的一个中间层.即满足接口的抽象,…
在从汇编看c++中指向成员变量的指针(一)中讨论的情形没有虚拟继承,下面来看看,当加入了虚拟继承的时候,指向成员变量的指针有什么变化. 下面是c++源码: #include <iostream> #include <cstdio> using namespace std; class Top { public: int _top; }; class Left : public virtual Top { public: int _left; }; class Right : pub…
没有父类的情况 1,静态代码块-->静态成员变量-->成员变量(实例属性)-->代码块-->构造函数 2, 静态代码块 和 静态成员变量 只会初始化一次 有父类的情况 1,父类非Object 静态成员变量 -- > 静态代码块 代码块-->成员变量(实例属性)-->构造函数 2, 父类是Object (其实相当于没有父类) 成员变量(实例属性)-->代码块-->构造函数 静态代码块 -->静态成员变量 基本所有的这一块度可以用上面的总结来判断(个…
Java中的成员变量和局部变量 一:成员变量: 成员变量在类中定义,用来描述对象将要有什么 成员变量可以被本类的方法使用,也可以被其他类的方法使用,成员变量的作用域在整个类内部都是可见的 二:局部变量: 在类的方法中定义,在方法中临时保存 只能被当前方法使用,局部变量的作用域仅限于定义它的方法 如: public class Telphone { float screen; //成员变量 float cpu; //成员变量 float mem; //成员变量 public void call()…
转自:http://blog.csdn.net/ameyume/article/details/6189749 在interface里面的变量都是public static final 的.所以你可以这样写:public static final int i=10;或则int i=10:(可以省略掉一部分) 注意在声明的时候要给变量赋予初值 解释: 首先你要弄清接口的含义.接口就是提供一种统一的’协议’,而接口中的属性也属于’协议’中的成员.它们是公共的,静态的,最终的常量.相当于全局常量.抽象…
我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用.而接口中的成员变量,就显得用得少一点,而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而且我觉得大多数不清楚为什么要用 static 和 final.下面我们就来解释一下. 一.为什么要用final? 首先,我们应该明白一个问题.接口,实际上比抽象类更加抽象,它是最高层次的抽象.接口中的所有方法都是抽象方法,不会有任何实现方面的代码,而它的具体实现是要靠实现这个接口的具体类来具体实现的.…
interface”(接口)可将其想象为一个“纯”抽象类.它允许创建者规定一个类的基本形式:方法名.自变量列表以及返回类型,但不实现方法主体.接口也可包含基本数据类型的数据成员,但它们都默认为public.static 和final.接口中定义的方法默认为public.abstract. 为什么Java接口中的成员变量默认为(public.static.final).成员方法为(public.abstract)呢? 接口是一种高度抽象的模版,接口中的成员变量是模版的一部分,其接口的实现类必须共有…
设p是指向结构体变量的指针,则可以通过以下的方式,调用指向的那个结构体中的成员: (1)结构体变量.成员名.如,stu.num. (2)(*p).成员名.如,(*p).num. (3)p->成员名.如,p->num.…
简单说一下吧, note:java中的成员变量就是c++中的全局变量 1.可以在全局范围内使用:局部变量只能在其定义的方法里使用. 2.成员变量可以不赋初值使用,调用时有系统的默认的初值,比如int类型的变量初值就是0,String 类型的就是null:局部变量必须赋初值才可以使用. 3.局部变量转成员变量快捷键ctrl+alt+f.…
java接口中变量的默认修饰符为 public static final int i = 3; 相当于 public static final int i = 3; java接口中方法的默认修饰符为 public abstract String fun(int a); 相当于 public abstract String fun(int a); 接口中的方法是可以使用static修饰的,但必须在接口中实现该方法. public interface Test { public static voi…
Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究.   1  无继承情况下的Java初始化顺序: class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println("Sample默认构造函数被调用"); } } class Test { static Samp…
我们在OC中定义变量,可以自己来定义变量的setter方法来设置变量值,用getter方法来获取变量值.但是当变量数量增多时,还采用手动添加setter/getter方法来操作变量,就会使得程序代码量大大增加.幸好从OC 2.0开始,我们能让系统自动生成设置变量值的方法或获取变量值的方法,即系统会自动为我们生成setter/getter方法.这中功能减少了代码量,让我们有更多的精力放在程序的业务逻辑上.为了使设置变量值的功能更加完善,OC使用@property来标识属性.例如变量可分为只读变量,…
Java的类中的数据成员中包含有静态成员(static)时,静态数据成员的初始化顺序是怎样的呢? [程序实例1] import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Bowl { Bowl(int marker) { System.out.println("Bow…
顺序 1. 父类中静态成员变量和静态代码块 2. 子类中静态成员变量和静态代码块 3. 父类中普通成员变量和代码块,父类的构造函数 4. 子类中普通成员变量和代码块,子类的构造函数 其中“和”字两端的按照代码先后顺序执行. 举例 先看代码: Father类 public class Father { public String fStr1 = "father1"; protected String fStr2 = "father2"; private String …
对于内置变量的自动初始化 代码1: #include<stdio.h> #define CONST 100 int *p1; ]; int b; static int c; main() { int d; static int e; ]; int *p2; printf("CONST=%d\n",CONST); printf(]); //printf("*p1=%d\n",*p1); printf("b=%d\n",b); print…
1.为什么类中引用成员函数? 类将属性和方法做了封装.类是一种数据类型,也就是:固定大小内存块的别名. 类的定义是一个抽象的概念,定义时不分配内存,当用类定义对象时,才分配一个固定大小的内存块. 此时,定义对象后,类内定义的变量就会执行一次初始化,但是主函数输出area时就是乱码,因为是直接去对应内存取值,而不是调用函数计算. 下面例子就说明了,类内成员函数的作用. class circle { public: double r; double pi = 3.14; // 定义一个对象后,初始化…
C++关于struct和class的区别,可以看上一篇文章:c ++ class和struct[转] 结构体成员列表初始化,来个例子: #include <iostream> #include <cstdio> using namespace std; struct Child{ string name, fun; int age; Child(){//初始化fun和age this->name = name; // name = name; 错误示例 }; }; struc…
很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量->子类静态变量初始化块->父类变量初始化->父类变量初始化块->父类构造方法->子类变量初始化->子类变量初始化块->子类构造方法 --------------------------------------------------我是copy分割线---------…