C++中默认构造函数中数据成员的初始化

构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员。即当类中的数据成员没有在构造函数中显示初始化,将执行默认初始化

1.对于内置类型(如int,double,char,bool等)和复合类型(数组,指针),定义任何函数体之外的内置类型或复合类型变量将被初始化0,对于函数体内的内置类型的对象,若没有初始化,其值是未定义的。

2.具有类类型的成员通过运行各自的默认构造函数来进行初始化。

 1 #include <iostream>
 2 #include <cstdlib>
 3 #include <string>
 4
 5 using namespace std;
 6
 7 class test{
 8 public:
 9     bool a;
10     int b;
11     float c;
12     string s;
13     int *d;
14     int e[3];
15 };
16 test global_a;  //定义在函数之外
17 int main()
18 {
19     test local_a;  //定义在函数之内
20     system("pause");
21     return 0;
22 }

如上可以,定义在函数体之内的内置类型和复合类型,其值均是未定义的,随机的,而对于类类型string,自动执行其构造函数,初始化为空。

时间: 2024-11-25 12:24:44

C++中默认构造函数中数据成员的初始化的相关文章

利用 构造函数 实现数据成员的 初始化

1 // 在程序中 常常需要对 变量进行初始化 在类中怎样 对 对象进行初始化呢? 2 // 前面说过 类是一种抽象的类型,不占储存空间 , 显然无处容纳 数据 所以在 进行 声明类的时候 3 // 就 赋初值 是不正确的 4 // 如果 一个 [[[类中 所有的成员]]] 都是 公用的 则可以在 定义对象时 对数据成员 进行初始化 ( 和 结构体的初始化 相似 ) 5 #include<iostream> 6 using namespace std; 7 class time // 声明一个

用构造函数实现数据成员的初始化

错误的做法: class Time {     hour=0;     minute=0;     sec=0; }//因为类是一种抽象类型,并不是一个实体,并且不占存储空间,显然无处容纳数据. 正确的做法: #include<iostream> using namespace std; class Time { public:     Time()     {         hour = 0;         minute = 0;         sec = 0;     }     v

c++类中对数据成员进行初始化和赋值的区别

在c++中定义一个类 ,对于构造函数 我们经常是这么写的: class test { public: test(int n_x , int n_y) { x = n_x; y = n_y; } private: int x , y; }; 这中写法虽然是合法的但比较草率 在构造函数 test(int n_x , int n_y)中 , 我们这样实际上不是对数据成员进行初始化 , 而是进行赋值. 正确的是初始化应该是这样的: class test { public: test() {} test(

构造函数调用构造函数进行数据成员初始化问题(极易出错)

先看下面代码: #include<iostream> using namespace std; class CLS { public: int m_i; CLS(int i):m_i(i) { cout<<"CLS():this="<<this<<endl; } CLS() { CLS(0); cout<<"CLS():this="<<this<<endl; } }; int mai

C++构造函数对类成员变量初始化,使用初始化列表和构造函数内部直接赋值 的差别

初始化和赋值对内置类型的成员没有什么大的差别,像任一个构造函数都能够. 但有的时候必须用带有初始化列表的构造函数: (1) 成员类型是没有默认构造函数的类.若没有提供显式初始化时,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败. (2) const成员或引用类型的成员.由于const对象或引用类型仅仅能初始化,不能对他们赋值. 另一个赋值次数,效率上的差别: 初始化參数列表在对象初始化时对成员变量赋值一次. 构造函数内直接赋值,对成员变量赋值两

C++的空类中默认产生哪些类成员函数

1 class Empty 2 { 3 public: 4 Empty(); 5 Empty(const Empty&); 6 ~Empty(); 7 Empty & operator =(const Empty &); 8 Empty * operator &(); 9 contt Empty * operator &() contst; 10 }

使用参数初始化表来实现对数据成员的初始化

这是c++提供的一种机制,具体格式如下: 1 class BOX 2 { 3 public: 4 BOX(int h,int w ,int len); 5 private: 6 int height; 7 int width; 8 int length; 9 }; 10 11 使用参数初始化表初始化的方式: 12 13 BOX::BOX(int h ,int w ,int len):height(h), width(w), length(len){} 14 15 传统的方式是这样子写的: 16

C++ 合成默认构造函数的真相

对于C++默认构造函数,我曾经有两点误解: 类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数. 合成默认构造函数会初始化类中所有的数据成员. 第一个误解来自于我学习C++的第一本书 <C++ Primer>,在书中392页:“只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数”. 实际上这句话也没有说错,它说明了默认构造函数定义的必要非充分条件,然而却给当时初学C++的我造成了一定的误解. 第二个误解依旧来自于Primer中的一句话:“合成的

C++类中的static数据成员,static成员函数

C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联!这句话可能比较拗口,其实可以这么理解:每个static数据成员可以看成是类的一个对象,而不与该类定义的对象有任何关系!下面我们就来具体看看类中的static数据成员! 谈到数据成员,我们最先想到的应该是怎么去定义一个static数据成