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(int n_x , int n_y):x(n_x) , y(y)  {}

private:
    int x , y;
};

虽然大部分时候赋值和初始化是没有区别的 , 但是构造函数的初始化值有时必不可少,例如:

class test
{
public:
    test()  {}
    test(int n_x , int n_y , int z_x)
    {
        i = n_x;
        ci = n_y;
        ri = z_x;
    }

private:
    int i;
    const int ci;
    int &ri;
};

上面代码的红色部分就是错误的 , 因为const 和 引用类型的数据成员的唯一机会就是通过构造函数进行初始化值。

因此,正确形式:

test(int n_x , int n_y , int z_x):i(n_x) , ci(n_y) , ri(n_z)  {}

c++类中对数据成员进行初始化和赋值的区别,布布扣,bubuko.com

时间: 2024-08-08 13:45:39

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

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

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

在另一个类中做数据成员的对象,可以先不初始化

class A { B b; } 因为在创建A类的时候,会先调用A的构造函数,同时对B类中的b对象调用他的构造函数 下面测试代码 class A { public: int a; A(int x) :a(x){}; }; class B:public A { private: A b; public: B(int x, int y) :A(x), b(y){} void display() { cout << a << endl << b.a << endl

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

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

.NET中利用反射来实现自动映射两个对象中的数据成员

在以前的项目开发之中,经常会遇到这样一个问题:比如在外面项目的架构设计之中,我们采用MVC和EntityFramework来构建一个Web应用程序.比如我们采用常用的多层架构,例如有Presentation层.BusinessLogic层.DataAccess层等,各层之间是相对独立并且职责分明的.比如我们在Presentation层中会定义ViewModel,在DataAccess层中的DbContext部分又会由EntityFramework来自动生成StorageModel,或者叫做Dat

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

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

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

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

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

C++中static数据成员详解

    本文和大家分享的主要是c++中static数据成员的相关用法及源码示例,希望能帮助大家更好的学习C++. static(静态存储)数据成员 StaticTest.cpp : 定义控制台应用程序的入口点. 1.知识点 static(静态存储)数据成员:编译时就被创建和初始化. 2.代码 #include "stdafx.h" #include using namespace std; class computer { private: float price; public: s

友元——友元可以访问与其有好友关系的类中的私有成员。 友元包括友元函数和友元类。

简介:友元可以访问与其有好友关系的类中的私有成员.    友元包括友元函数和友元类. [1]将普通函数声明为友元函数 #include<iostream> using namespace std; class Time { public: Time(int,int,int); friend void display(Time &);//定义友元函数 private: int hour; int minute; int sec; }; Time::Time(int h,int m,int