C++初始化数据成员

在C++初始化类的成员数据有两种方式
1. 在构造函数中实现

2. 定义初始化成员列表来初始化成员数据

class point
{
  private:
  int x,y;
  public:
  point(int m,int n)
  {
      x=m;
      y=n;
   }
};

class point
{
  private:
  int x,y;
  public:
  point(int m=0,int n=0):x(m),y(n){}
};

这两种初始化成员数据方式有差别,用构造函数初始化成员数据其实就是用赋值来实现,用初始化成员列表则只是直接对数据成员进行初始化。具体在以下三种情况下使用初始化成员列表

1. 需要初始化的数据成员是对象

  如果需要初始化的数据成员是对象,则如果用构造函数初始化,则要调用该类的拷贝构造函数,产生临时对象,如果直接对该需要初始化的对象进行初始化,则会带来性能上的优异。

2. 需要初始化const修饰的数据成员

  const修饰的变量是不能进行赋值操作的,因此只能直接初始化

3. 需要初始化引用成员数据

  引用类型同const修饰的数据成员,也是只能进行初始化。

时间: 2024-08-28 11:59:57

C++初始化数据成员的相关文章

C++学习笔记17,构造函数体内初始化数据成员与构造函数初始化器的区别(一)

在构造体内初始化数据成员是最常见的方法. 例如: #include <iostream> using namespace std; class A { private: int i; string s; public: A(int ii,string ss){ //在构造函数体内初始化数据成员 i=ii; s=ss; cout<<"ctor:i="<<i<<",s="<<s<<endl; } /

C++:用成员初始化列表对数据成员初始化

1.在声明类时,对数据成员的初始化工作一般在构造函数中用赋值语句进行. 例如: class Complex{ private: double real; double imag; public: Complex(double r,double i) //声明构造函数原型 { ........... } }; Complex::Complex(double r,double i) //在构造函数中用赋值语句对数据成员赋初值 { real = r; imag = i; } 2.另一种初始化数据成员的

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

构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据成员没有在构造函数中显示初始化,将执行默认初始化: 1.对于内置类型(如int,double,char,bool等)和复合类型(数组,指针),定义任何函数体之外的内置类型或复合类型变量将被初始化0,对于函数体内的内置类型的对象,若没有初始化,其值是未定义的. 2.具有类类型的成员通过运行各自的默认构

Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员

有关const成员.static成员.const static成员的初始化: 1.const成员:只能在构造函数后的初始化列表中初始化 2.static成员:初始化在类外,且不加static修饰 3.const static成员:类只有唯一一份拷贝,且数值不能改变.因此,可以在类中声明处初始化,也可以像static在类外初始化 #include <iostream> using std::cout; using std::endl; class base { public: base(int

C++类中常量数据成员和静态数据成员初始化

常量数据成员初始化原则: 在每一个构造函数的初始化列表中初始化 静态数据成员初始化原则: 类内声明,类外初始化(因为它是属于类的,不能每构造一个对象就初始化一次) // test_max.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> #include <vector> using namespace std; class A { public: A(int i):a(0) {} A():

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(

类的静态数据成员初始化问题

1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域运算符来指出静态成员所属的类.但如果静态成员是整形const或枚举型const,则可以在类声明中初始化. C++ primer plus P426-P427类静态成员的声明和初始化 //strnbad.h class StringBad { private: static int num_strings; … }; //strnbad.cpp int StringBad::num_strings = 0; 不能在类声

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

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

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

先看下面代码: #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