C++系统自动生成默认构造函数的情况

(1) 基类存在默认构造函数

class CBaseClass

{

public:

CBaseClass()

{

m_i = 0;

}

private:

int m_i;

};

class CDriveClass: public CBaseClass

{

public:

void func()

{

}

private:

};

(2) 成员变量存在默认构造函数

class CTestClass

{

public:

CTestClass()

{

m_i = 1;

}

private:

int m_i;

};

class CDriveClass

{

public:

void func()

{

}

private:

CTestClass mTestClass;

};

(3) 存在虚函数:初始化虚函数指针

class CDriveClass: virtual public CBaseClass  //: public CBaseClass

{

public:

void func()

{

}

};

(4) 存在虚基类:初始化虚基类指针

class CBaseClass

{

};

class CDriveClass: virtual public CBaseClass

{

public:

void func()

{

}

};

具体可以查看反汇编代码:Visual Stdio 2010编译器中:Debug->windows->Disassembly

--汇编代码

CDriveClass d;

002613DE  push        1

002613E0  lea         ecx,[d]

002613E3  call        CDriveClass::CDriveClass (261136h)

时间: 2024-10-11 05:19:49

C++系统自动生成默认构造函数的情况的相关文章

编译器生成默认构造函数的情况

在类没有显示声明构造函数的情况下,编译器并不总是为我们自动生成默认构造函数,以下4种情况,编译器才会为我们自动生成默认构造函数: 1.类中有一个类成员含有默认构造函数的,编译器会为该类自动生成默认构造函数,自动插入代码,调用该成员的构造函数: 2.基类中含有默认构造函数,编译器会为该类自动生成默认构造函数,自动插入代码,调用基类的构造函数: 3.类中含有虚函数时,由于编译器要为该类生成虚函数表vtable,并为该类的对象生成指向该vtable的vptr,所以需要为该类合成默认构造函数: 4.虚继

编译器自动生成默认构造函数的四种情况

在以下四种情况中,如果类中没有定义一个默认构造函数,则编译器会自动生成一个nontrivial的默认构造函数,而不是一个不做事情的trivial默认构造函数:1.内含一个成员变量,而这个成员变量所属的类中含有默认构造函数,则此时需要为此类生成一个implicit default constructor(隐式的默认构造函数),这个implicit default constructor是nontrivial的,因为内含的成员变量需要进行默认构造操作. 如果内含一个成员变量a,且该成员变量a含有默认

关于后台系统自动生成的一点思考

大量实践发现后台管理程序,其实90%的代码都是相同的,当然是在抛弃复杂逻辑业务的情况下,那么如何能高效的节约这些时间呢,那就是接下来我要说的,对于后台系统自动生成的一些思考. 适用情景: 1.表编号id为自增(基于现在大部分表编号都是自增的情况): 2.没有太复杂业务关联关系,比如表的某一个字段,存储了一个json对象,为了平衡后台用户使用,需要友好的分段展示给用户的定制ui界面:还比如表中存储了外键的多个id,但为了方便用户使用,只能已标签name的方式,给用户展示,等等这些超强业务黏合逻辑的

实训24 功能块的生成与调用 注意功能块的背景数据块 变量表最左侧的地址是系统自动生成的。前面讲 功能块与功能的区别是 功能块不能一个扫描周期完成,本功能块例子 确实不是一个扫描周期能完成,例如判断转速超速 可能过了好多扫描周期

实训24 功能块的生成与调用 一定要注意 功能块的背景数据块中 最左侧的地址 是自动生成的. 我只需要在功能块的程序中输入 符号 名称 例如 start stop tof …….等等. 如下图 功能块 是用户编写的有自己存储区(背景数据块)的逻辑块. 功能块主要用于执行在一个扫描周期内不能结束的操作. TOF是timer 数据类型 属于输入局部变量. 本例程的输入参数TOF的数据类型为Timer(定时器),TOF的实参应该为定时器的编号 例如T1 PRESPEED 是静止变量 STAT 初始值是

点击鼠标后系统自动生成对应消息

转载:C++ (非MFC) 下的鼠标事件响应函数接口是什么? 没有响应函数,而是消息,点击鼠标以后,系统扑捉到消息然后传递给应用程序的消息处理函数,消息处理函数,根据switch语句进行判断,在相应的case下自己编写函数.switch(msg){ case:WM_LBUTTONDOWN 自己编写的函数或语句,用于响应鼠标左键被按下 .....}消息映射机制是MFC特有的.

为什么全局变量无须初始化 系统自动给默认值,局部变量必须初始化?

基本数据类型 数值6类 (long/int/short/byte)(double/float) 非数值2类(char,boolean) 下面是默认值: 0/0/0/0/0.0/0.0/ /false 首先 Java 语言就是这么规定的. 然后为什么 Java 语言要这么规定呢?有什么内部机理吗? 可能的原因如下,当我们新建一个对象时,Java会在Heap中申请一块内存区域用以存放类的数据.而成员变量就是类的数据,也是放在这块内存区域中的.只需要JVM在申请内存的时候顺便把整块区域都置为零即可完成

Python 调用让系统自动调用默认程序打开文件?

windows上可以使用os.startfile os.startfile(file) linux上可以使用xdg-open subprocess.call(["xdg-open", file]) mac os上可以使用open subprocess.call(["open", file])

MsSQLserver中修改字段值系统自动生成的脚本

主要参考一下脚本的实现思路: ①创建临时表 ②创建临时表 ③向临时表插入数据 ④删除原表 ⑤临时表改名 /* 为了防止任何可能出现的数据丢失问题,您应该先仔细检查此脚本,然后再在数据库设计器的上下文之外运行此脚本.*/ BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET

系统自动生成ID(比UUID.radom().tostring()要好看)

public class test1 { public static void main(String[] args) { char[] para = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'}; String result = new String(