精华内容
下载资源
问答
  • C++中数据成员如何初始化

    千次阅读 2020-03-10 18:25:10
    C++中数据成员初始化,首先需要明白在中都有哪些数据成员 const成员:也就是常量成员,它们在声明时就要初始化,因为它们为常量成员,一旦定义,就不能修改 引用成员&:引用代表的就是被引用者自身,是...

    C++中类的数据成员初始化,首先需要明白在类中都有哪些数据成员

    • const成员:也就是常量成员,它们在声明时就要初始化,因为它们为常量成员,一旦定义,就不能修改
    • 引用成员&:引用代表的就是被引用者自身,是变量的别名,所以引用类型变量一旦初始化,它们也不能修改
      const、引用成员必须在类的构造函数中的初始化列表中初始化,不能在构造函数的函数体中进行赋值
    • static成员:静态成员,它不像其他成员,static没有隐藏的this指针,所以static成员是属于整个类的,不是某个对象的,静态成员的初始化要在类外初始化,在类外初始化时需要隐藏static关键字,只有整形静态常量可以在类内初始化
    • 整形静态称量:static const int 类型,这种数据类型可以在类内初始化

    class A{
    public:
        const int a; // 常量成员,需要在构造函数的初始化列表中赋值初始化
        int& b; // 引用成员,也是构造函数的初始化列表赋值
        static int c; // 静态成员,要在类外初始化
        static const int d = 0; // 静态整形,可以在类内初始化
        static int f;
        static const double e; // 只能在类外初始化
        A(int a, int& b ):a(a), b(b){}
    }
    // 需要在类外初始化的成员变量,隐藏static关键字
        const double A::e = 1.0;
        const int A::f = 1; // 也可在类外初始化
        
    
    

    展开全文
  • **************************数据成员初始化 *******************************************************************************************************************1、数据成员是否能在定义的时候就初始化?...
    **************************数据成员的初始化 ************************************
    *******************************************************************************
    1、数据成员是否能在定义类的时候就初始化?
    class A
    {
    private:
       int a = 1;
    };
    int mian(){}

    一般而言,在定义类的时候,类中的数据成员,是不能初始化的。原因如下:

    [1] 类是一个抽象类型,并不是实体的东西,利用抽象的类型会实例化成不同的个体,每个个体的特征(数据成员)都不一样,如果在类中将特征初始化了,岂不是破坏了抽象性,做了一个一样的模子?

    [2]类的定义实际上相当于是类型的声明,并没有分配存储空间,初始化后的数据给哪里放?类实例化以后才会有实体存储地址以及空间。

    所以有以下几条结论:

    [1]一般数据成员可以在构造函数中初始化(构造初始化列表初始化和构造函数体内赋值初始化)

    [2]const数据成员必须在构造函数的初始化列表中初始化(道理很简单,const成员第一次数据初始化就是发生在类构造数据初始化时,一旦过了此时,就会出现问题)

    [3]static要在类的定义外面初始化

    [4]数组成员是不能再初始化列表里初始化的,不能给数组指定明显的初始化。

    温馨提示:

        然而在C++11标准允许在类定义时初始化数据成员,以下代码与文章开头代码等价

    class A
    {
    public:
       A()
        {
          a=1;
        }
    private:
        int a;
    };
    int main(){}
    

    **************************************************************************************
    对象不同位置(函数体内,函数体外)   其内的数据成员(内置类型,符合类型)初始化状况不同

    **************************************************************************************

    #include <iostream>
    #include <cstdlib>
    #include <string>
    
    using namespace std;
    
    class test{
    public:
        bool a;
        int b;
        float c;
        string s;
        int *d;
        int e[3];
    };
    test global_a;  //定义在函数之外
    int main()
    {
        test local_a;  //定义在函数之内
        system("pause");
        return 0;
    }

    由上可以看出,定义在函数体之内的内置类型和复合类型,其值均是未定义的,随机的,而对于类类型string,自动执行其构造函数,初始化为空。所以需要对定义在函数体内部的对象对应的数据成员进行初始化。


    ***********函数体内对象  中的  数据成员进行初始化(构造函数) *******************

    *******************************************************************************

    1、在构造函数(不带参数)体内部对 对象中的数据成员进行初始化

    #include<iostream>
    using namespace std;
    
    class Time
    {
    public:
            Time()  //构造函数的名字必须与类名相同
            {
                    hour = 0;//用构造函数 对 对象中的数据成员进行初始化
                    minute = 0;
                    sec = 0;
            }
            void set_time();
            void show_time();
    private:
            int hour;
            int minute;
            int sec;
    };
    
    void Time::set_time(){
            cout<<"请输入时间:"<<endl;
            cin>>hour;
            cin>>minute;
            cin>>sec;
    }
    
    void Time::show_time(){
            cout<<hour<<":"<<minute<<":"<<sec<<endl;
    }
    
    int main()
    {
            Time t1;
            t1.set_time();
            cout<<"t1显示的时间是:\t";
            t1.show_time();
            Time t2;
            cout<<"t2显示的时间是:\t";
            t2.show_time();
            return 0;
    }
     
    

    当构造函数不带参数时候,对数据成员的初始化如上演示所示。  t1调用了set_time()函数,所以最后输出的时间值为cin输入的值;t2没有调用set_time()函数,所以输出的为构造函数中所赋予的时间值。

    2、在构造函数(带参数)内部对 对象中的数据成员进行初始化

    #include<iostream>
    using namespace std;
    
    class Box
    {
    public:
    /*      Box()
            {
                    height=0;
                    width=0;
                    length=0;
            }
    */      Box(int,int,int);
            int volume();
    private:
            int height;
            int width;
            int length;
    };
    
    Box::Box(int h,int w,int l){
            height = h;
            width = w;
            length = l;
    }
    
    int Box::volume(){
            return height*width*length;
    }
    
    int main()
    {
    //若建立队形并不想指定对象的长宽高 需要自己定义一个默认构造函数 并对数据成员进行初始化
    //      Box box1; 
            Box box2(12,34,23);//建立对象box2并且指定对象的长宽高
            cout<<"the volume of box2 is "<<box2.volume()<<endl;
            return 0;
    }
    

    带参数的构造函数的形参,其对应的实参在定义对象的时候给定。

    使用带有参数的构造函数可以方便的实现对不同的对象进行初始化。

    3、在构造函数的初始化列表中 对数据成员进行初始化
    #include<iostream>
    using namespace std;
    
    class Box
    {
    public:
            Box();
            Box(int h,int w,int l):height(h),width(w),length(l){};
            int volume();
    private:
            int height;
            int width;
            int length;
    };
    
    Box::Box(){
            height = 5;
            width = 6;
            length = 2;
    }
    
    int Box::volume(){
            return height*width*length;
    }
    
    int main()
    {
            Box box1;
            cout<<"the volume of box1 is "<<box1.volume()<<endl;
            Box box2(12,34,23);//建立对象box2并且指定对象的长宽高
            cout<<"the volume of box2 is "<<box2.volume()<<endl;
            return 0;
    }
    


    参考的网址:

        1》C++中在函数体内的对象包含的部分数据成员没有初始化:https://www.cnblogs.com/coding-wtf/p/5786854.html

        2》C++中数据成员的初始化:https://blog.csdn.net/don_sandman/article/details/78042949

    展开全文
  • C++中的数据成员初始化问题

    千次阅读 2019-06-27 11:38:22
    首先我们先来看一个简单的: class Test{ public: Test(); private: int a;...数据成员的属性大概包括:普通成员变量,引用成员变量,常成员变量,静态成员变量,静态常成员变量。 普...

    首先我们先来看一个简单的类:

    class Test{
    public:
        Test();
    private:
        int a;
        int &b;
        const int c;
        static int d;
        static const int e;
    };

    类的数据成员的属性大概包括:普通成员变量,引用成员变量,常成员变量,静态成员变量,静态常成员变量。

    普通成员变量:

    普通成员变量是每个对象私有的,一般在类的构造函数中进行赋值(这里不是初始化,普通成员变量一般是在定义后被初始化位一个随机的值,在构造函数里只是进行赋值)。

    静态成员变量:

    static成员变量需要在类定义体外进行初始化与定义,因为static数据成员独立该类的任意对象存在,它是与类关联的对象,不与类对象关联,一般我会写在cpp文件,构造函数的前面。

    静态常成员变量:

    该类型成员可以直接在类中初始化,也可以在类中声明,在类定义体外进行定义。我一般在.h文件定义的时候直接初始化。

    常成员变量跟引用成员变量:

    c++规定const成员和引用成员必须在初始化列表中初始化,而不能在构造函数体内初始化。

    为什么需要这么规定呢?因为在进入构造函数体内时,实际上变量都已经初始化完毕了,构造函数内能做的只有赋值,而const类型和引用类型是不可以赋值的。所以,需要在初始化列表中初始化。

     

    展开全文
  • 首先,应该明确类需要定义,但类不是真实存在的对象,类的定义过程是对类的一个“声明”,并不会为其分配内存(包括static成员,也因此static成员必须类内声明,类外定义(初始化))。 必须通过构造函数才能将类...

             1.实例化的过程

    首先,应该明确类需要定义,但类不是真实存在的对象,类的定义过程是对类的一个“声明”,并不会为其分配内存(包括static成员,也因此static成员必须类内声明,类外定义(初始化))。

    必须通过构造函数才能将类实例化,这样类的数据成员才会被分配内存。

    由于static成员属于类不属于各个对象,所以其不能通构造函数初始化,必须通过类外初始化,才能分配内存。至此所有数据成员都完成初始化。

    2.类内初始值的用途

    C++ 11 之后才有了使用类内初始值,并通过合成的默认构造函数进行成员初始化的新特性,可以说类内初始值是为类得默认初始化服务的。

    编译器合成的默认构造函数会利用类内初始值初始化,但是前提是类含有显式的默认构造函数,或者不含其它任何构造函数,其他构造函数不支持类内初始值初始化。如果类内没有类内初始值,一般是无法通过默认初始化,即使有的编译器支持这样的操作,得到的对象也会含有未定义的数据成员。为了使构造函数将所有非静态成员初始化,当使用默认构造函数,类成员必须都有类内初始值;当使用其他构造函数时要将所有成员进行初始化,不然即使该成员有类内初始值,其值也是未定义的。

     

     

    展开全文
  •  (C++11提供了初始化,因此内常量可在声明进行类初始化,因此该内常量的作用域属于级,即该的所有对象均具有同一个值。)#include &lt;iostream&gt; using namespace std; class A ...
  • 在c++中定义一个 ,对于构造函数 我们经常是这么写的: class test { public: test(int n_x , int n_y) { x = n_x; y = n_y; } private: int x , y; }; 这中写法虽然是合法的但比较草率 在构造函数 ...
  • C++11属性成员初始化

    千次阅读 2020-03-29 17:03:50
    在C++11中,大多数的基础数据类型都可以直接初始化,可以不通过构造函数来初始化。还有一些仍旧是初始化。由于可能存在C++11支持的程度不同,以及编译器厂商是否C++进行了扩展。下面是我的测试平台: 测试...
  • 1 静态数据成员不能用参数初始化表静态数据成员初始化 (1) 如果声明了而未定义对象,则的一般数据成员是不占内存空间的,只有在定义对象时,才为对象的数据成员分配空间。但是静态数据成员不属于某一个对象...
  • c++成员变量初始化总结

    千次阅读 2019-06-14 17:04:11
    首先把需要初始化成员变量分为几: a.一般变量(int) b.静态成员变量(static int) c.常量(const int) d.静态常量(static const int) 对应的初始化方式是: a.一般变量可以在初始化列表里或者构造...
  • 这种方法不在函数体内对数据成员初始化,而是在函数首部实现。这样可以减少函数体的长度。 举例如下: #include using namespace std; class Student { public: void display(); Student(int a,string b,char c)...
  • C++11中类数据成员初始化方法详解

    千次阅读 2016-12-31 21:28:38
    C++98为中提供成员的初始化列表。 对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各... 3.const数据成员必须在构造函数的初始化列表中初始化。  4.static要在的定义外面初始化
  • C++模板中静态数据成员初始化

    千次阅读 2018-09-21 21:25:33
    首先看代码,静态数据成员分为两种情况,第一种不依赖模版类型参数,第二种依赖模版类型参数。 template &lt;typename T&gt; class TestTemStatic{ public: static int knownTypeVar; static T ...
  • C++中的静态数据成员初始化

    千次阅读 2016-05-16 14:49:24
    静态数据成员初始化必须在以外进行定义性说明。 形式为: :: =值 静态成员注意以下几点: 1、静态成员必须初始化,如果其是有公共访问属性的可以通过对象重新设置值,其最终值以最后一次设置的为准。 ...
  • 2、static成员初始化外,且不加static修饰 3、const static成员只有唯一一份拷贝,且数值不能改变。因此,可以在中声明处初始化,也可以像static在初始化 示例:   #include using st
  • c++的静态数据成员初始化方法

    千次阅读 2020-03-18 14:51:35
    的静态成员变量初始化应该在进行 注意,不能在头文件初始化,只能在cpp文件中初始化,...2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:  <数据类型><类名>::&l...
  • 成员变量初始化总结

    万次阅读 2015-04-08 11:52:23
    首先把需要初始化成员变量分为几: Ø 一般变量(int) Ø 静态成员变量(static int) Ø 常量(const int ) Ø 静态常量(static const int)  对应的初始化方式是: Ÿ 一般变量可以在初始化列表里或者...
  • 1.常规方法: 假设定义了如下
  • c++模板静态成员初始化

    千次阅读 2019-07-03 10:00:11
    template<class T> class ThreadPool { private: unsigned int max_task_number; } template<class T> unsigned int ThreadPool<T>::max_task_number=0; 按照颜色对应修改就可了。......
  • 关于C++ 数据成员在定义时初始化问题。

    千次阅读 多人点赞 2019-06-12 15:31:14
    很多人在习惯上在声明变量时就赋上初值,但对于c++中的数据成员能否这样做呢? 显然是不行的,这是编译语法的规定。因为就相当于一个数据的模板,是一种自定义组合的新数据类型,而不是一个变量。当程序声明一个...
  • 1.定义静态数据成员后要静态数据成员进行初始化! 静态数据成员初始化: <数据类型><类名>::静态数据成员 = <值> 2.静态数据成员往往数私有的,静态数据成员不能直接访问,要通过定义为公有...
  • C++类成员初始化顺序问题

    万次阅读 多人点赞 2017-11-22 21:08:20
    今天刚把买了一个月的剑指offer这本书翻阅一下,看到一个简单的举例。...C++类成员初始化顺序问题1 C++类成员初始化顺序问题2 问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下,#include us
  • 一,必须在构造函数初始化列表里进行初始化数据成员有哪些? 下面是一个自定义的Student class Address{}; class Student{ private: const int grade; string &name; Address addr; public: Student(int ...
  • 的成员主要由实例方法和数据成员组成。在中创建了的成员后,可以通过的实例进行访问 实例方法 是指在中定义的函数。该函数是一种在的实例上操作的函数。 ‘’‘ 语法: class 类名(): 的说明信息 def ...
  • c++初始化各种类型的数据成员

    千次阅读 2018-03-30 11:37:12
    c++里初始化静态、非静态,const以及引用的数据成员各不相同静态成员初始化class a { private: static int i1 = 1; //错误 static int i2; //应该这么做 static const int i3 =2; //正确 int i4 = 1; //正确 }...
  • 中静态变量与const常量成员初始化
  • 静态数据成员的定义及初始化

    千次阅读 2017-11-16 11:25:30
    静态数据成员的定义及初始化
  • }运行c++代码提示:error C2536: “ViBe::ViBe::c_xoff”: 无法指定数组的显式初始值设定项尝试在.h 中定义变量,构造函数中进行初始化后提示以下错误:error C2440: “=”: 无法从“initialize...
  • C++静态成员变量初始化

    千次阅读 2021-06-17 10:35:00
    静态成员变量可以初始化,但只能在体外进行初始化。如: long long student::number = 13926572996; //在体外静态成员变量赋值 其一般形式为: 数据类型 类名::静态成员变量名 = 初值; 不必在初始化...
  • C++中的数据成员能否在定义的时候就初始化

    万次阅读 多人点赞 2017-03-06 17:31:42
    一般而言,中的数据成员在定义的时候是不能初始化的。这是一个可以值得探讨的话题,每个人的解释都不一样,大部分人都认为这是编译语法的规定,那么有没有考虑为什么会有这个规定呢? 个人认为可能的原因有: ...
  • c++static成员变量初始化

    万次阅读 2019-05-10 23:12:38
    今天看到一个写法,竟然不知道这种写法。。。我是不是脑子完犊子了。。。 在test.h文件中: ... //静态数据成员声明 ... //静态数据成员的定义和初始化 中的静态成员变量的初始化必须在外实现!! ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 541,064
精华内容 216,425
关键字:

对类的数据成员进行初始化