精华内容
下载资源
问答
  • 对象初始化列表

    2011-12-16 12:55:53
    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 对象初始化列表 { class Program { static void Main(string[] args) { Point A
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 对象初始化列表
    {
        class Program
        {
            static void Main(string[] args)
            {
                Point A = new Point();
                Point B = new Point{ a1=10,a2=20 };//对象初始化列表
                Console.WriteLine("{0},{1}",A.a1,A.a2);//1,2
                Console.WriteLine("{0},{1}",B.a1,B.a2);//10,20
                Console.ReadKey();
            }
        }
        class Point 
        {
            public int a1 = 1;
            public int a2 = 2;
        }
    }
    

    展开全文
  • C++对象初始化列表

    2019-01-12 19:16:03
    1.对象初始化列表的执行顺序要优先于构造函数。 2.对象初始化顺序和对象在初始化列表中所在位置无关,和在类中的声明顺序有关。 #include using namespace std; class Test2 { public: Test2():m_a(10),m_b(99) { ...

    对象初始列表:
    构造函数后加 : 后面接上要初始化的成员,各个成员之间以逗号进行区分。
    1.对象初始化列表的执行顺序要优先于构造函数。
    2.对象初始化顺序和对象在初始化列表中所在位置无关,和在类中的声明顺序有关。

    #include

    using namespace std;

    class Test2
    {
    public:
    Test2():m_a(10),m_b(99)
    {
    cout<<“asdadasd”<<endl;
    }
    void show()
    {
    printf(“m_a = %d, m_b = %d\n”,m_a,m_b);
    }

    private:
    int m_a;
    const int m_b;

    };
    int main(int argc, char *argv[])
    {
    // Test t=Test(10,20,30);

    // Test t1 = t;
    // t1.show();
    Test2 t2;
    t2.show();
    return 0;
    }

    展开全文
  • 对象初始化列表: 构造函数后加 “ :”, 后面接上要初始化的成员,各个成员之间以逗号进行区分 Test(int a, int b): m_a(),m_b(b) {} 1、对象初始化列表的执行要优先于 构造函数 2、对象的初始化顺序和对象在初始...

    对象初始化列表:
    构造函数后加 “ :”, 后面接上要初始化的成员,各个成员之间以逗号进行区分

    Test(int a, int b): m_a(),m_b(b)
    {}
    

    1、对象初始化列表的执行要优先于 构造函数
    2、对象的初始化顺序和对象在初始化列表中所在位置无关,和在类中的声明顺序有关

    拷贝构造: 类型(const 类名& 变量名)

    Test(const Test &obj)     // 拷贝构造函数  赋值构造函数
        {
            m_a = obj.m_a;
            printf ("拷贝构造被调用\n");
        }
    
    
    Test t = 10;
    
    Test t1 = t;
    t1.show();
    
    // 赋值操作   t1已经存在,
    t1 = t;    //这里不会调用构造函数    和对象初始化进行区分
    
    // 函数参数是对象的时候,实参到形参的传递会调用拷贝构造 ==> 建议使用引用
    void func(Test &obj){}
    
    // 对象作为返回值的时候,也会调用拷贝构造函数 
    // ===>  不同的编译对函数返回值处理方式可能不同
    Test func()
    {
        Test t = 10;
        return t;
    }
    

    当类中没有拷贝构造的时候,系统会添加一个拷贝构造,进行 “值” 的复制 ====> 浅拷贝过程
    深拷贝:复制的时候连同 堆上的空间一起复制 ====> 自己写
    当成员变量中存在指针的时候,要进行深拷贝

    Test1(const Test1 &obj)//拷贝构造函数
        {
            m_a = obj.m_a;
            m_b = obj.m_b;
            m_pa = new int;
            *m_pa = *(obj.m_pa);
        }
    
    展开全文
  • 这种机制就是对象初始化列表——用来对对象进行初始化形式——构造函数后面:要初始化的对象特性:1、对象初始化列表比当前对象的构造函数先执行2、对象在对象初始化列表中的顺序和构造顺序无关,和在类中的声明顺序...

    有这样一种情形 :一个类B中 有另一个类A的对象,A中没有无参构造,不能直接定义A的对象,需要某种机制对A的对象进行初始化。

    这种机制就是对象初始化列表——用来对对象进行初始化

    形式——构造函数后面:要初始化的对象

    特性:

    1、对象初始化列表比当前对象的构造函数先执行
    2、对象在对象初始化列表中的顺序和构造顺序无关,和在类中的声明顺序有关
    3、const常量也要放到对象初始化列表中进行初始化

    4、析构函数的调用顺序和构造函数的调用顺序相反

    eg:

    class A
    {
    public:
    A(int a)
    {
    a1 = a;
    }
    A(int a, int b)
    {
    a1 = a;
    a2 = b;
    printf ("A的构造函数被调用-------: a1 = %d, a2 = %d\n", a1, a2);
    }
    void show()
    {
    printf("a1 = %d, a2 = %d\n", a1, a2);
    }
    ~A()
    {
    printf("A的析构函数被调用 a1 = %d, a2 = %d\n", a1, a2);
    }
    private:
    int a1;
    int a2;
    };

    class B
    {
    public:
    B():obj1(1,2), obj2(3,4), c1(20), b1(12)/*先是obj1调用A的构造函数,再是obj2调用A的构造函数,最后是b调用B的构造函数*/
    {
    printf("B的构造函数被调用-----b = %d\n", b1);
    }
    ~B()
    {
    printf("B的析构函数被调用-----b = %d\n", b1);
    }
    private:
    int b1;
    A obj1;//类中的声明顺序,决定了初始化列表中的调用构造的顺序
    A obj2;
    const int c1;
    };

    int main()
    {
    B b;
    return 0;

    }

    运行结果分析:

    (obj1)A的构造函数被调用-------: a1 = 1, a2 = 2

    (obj2)A的构造函数被调用-------: a1 = 3, a2 = 4

    (b)B的析构函数被调用-----b = 12

    (b)B的析构函数被调用-----b = 12

    (obj2)A的析构函数被调用 a1 = 3, a2 = 4

    (obj1)A的析构函数被调用 a1 = 1, a2 = 2

    需要使用初始化列表的情形和原因,下面是一条博客链接点击打开链接,里面有详细介绍,这里就不再赘述

    http://blog.csdn.net/sinat_20265495/article/details/53670644

    展开全文
  • 对象初始化列表出现原因 1.必须这样做: 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这个类成员...
  • 对象初始化列表  1)对象初始化列表出现的原因  必须这样做 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数,这时要对这个类成员进行初始化...
  • c++の对象初始化列表

    2017-09-25 21:37:56
    1、对象初始化列表出现原因 (1).必须这样做: 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这...
  • (1) 对象初始化列表出现的原因 1.必须这样做: 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数 ()。这时要对这个类成员进行初始化,就必须...
  • 1)对象初始化列表出现原因 1.必须这样做: 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这个类...
  • 1)对象初始化列表出现原因 1.必须这样做: 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有 一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化, 就必须调用这...
  • //构造函数的对象初始化列表 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class PointA{ public: PointA(int _x){ x = _x; } void GetX(){ prin...
  • 首先是静态构造函数: static构造函数是初始化类层次的项目,通常是初始化类的静态字段。 类层次的项目需要被初始化: 1.在任何静态成员被引用之前 ...其次是对象初始化列表: 其有两种语法形式: new TypeNa...
  • 1、构造函数的对象初始化列表——初始化列表先于构造函数的函数体执行 原因: 1)、必须这样做: 如果我们有一个类成员(A类),它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数, 而没有默认...
  • c++编译器提供了初始化列表对成员变量进行初始化, Constructor::Constructor():m1(v1),m2(v1,v2),m3(v3); #define _CRT_SECURE_NO_WARNINGS #include using namespace std; class A { pub
  • #include using namespace std; class A { protected: ...B::B(int b):A(b),c(2),e(6),d(3) //仅在此处用 父类...初始化列表的三种情况 1.继承有参的类 2.当类中定义了类成员对象 3.类中定义了const型对象
  • 类和对象部分 浅拷贝与深拷贝的问题 (Code::Blocks编译) #include <iostream> #include <cstring> using namespace std; //定义Teacher类 class Teacher { public: Teacher(int _id,const char *_...
  • C++中的类可以定义一个特殊的成员函数清理对象,叫析构函数 语法:~calssname() 析构函数没有任何参数和返回类型的声明 析构函数在对象销毁时自动被调用 class test{ public: test(){ a=10; p=(cha...
  • 1.问题由来 ...例如在下面这段代码的场景中,如何定义一个B对象则会报错,因为A没有无参构造函数。 class A { public: A(int a) { this->a = a; } private: int a; }; class B { private: ...
  • 对象初始化列表

    2020-11-09 17:04:35
    对象初始化列表出现原因 1.必须这样做: 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这个类成员的...
  • 类和对象初始化列表 C++提供了初始化列表语法,用来初始化属性 语法 : 构造函数()∶属性1(值1), 属性2(值2) … {}
  • 初始化列表对象 static 一.初始化列表 构造函数的初始化列表 ‘:’来指明成员的初始化方式 构造函数内部都是赋值 CLink(): a(20) //(int a = 20 初始化a) {  b = 30; //赋值 } 笔试题:以下这段...
  • c++类 用冒号初始化对象(成员初始化列表) c++类 用冒号初始化对象(成员初始化列表) 成员初始化的顺序不同于它们在构造函数初始化列表中的顺序,而与它们在类定义中的顺序相同 #include&lt;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,958
精华内容 2,383
关键字:

对象初始化列表