精华内容
下载资源
问答
  • c++对象数组初始化

    2020-04-17 16:28:32
    在学习c++对象数组时,无意中发现书中写到的数组初始化,测试过程中发现若自己写上拷贝构造函数,则会报错,而如果形参是常引用居然可以通过。 这里附上参考了一下大佬的博客,关于移动构造函数与复制构造函数 属实...

    C++对象数组的初始化

    只是对学习过程中遇到的一点小疑惑搜集了一点资料,才疏学浅,就当是笔记了。
    在学习c++对象数组时,无意中发现书中写到的数组初始化,测试过程中发现若自己写上拷贝构造函数,则会报错,而如果形参是常引用居然可以通过。
    这里附上参考了一下大佬的博客,关于移动构造函数与复制构造函数
    属实”无聊“的我进行了一番这“无用”的研究。不过了解了移动构造函数,复制构造函数,左右值引用的区别也算没浪费时间。嘿嘿

    对象数组的初始化:逐个元素调用构造函数进行初始化。
    如1. clock c1[5];//调用默认构造函数对每个对象元素进行初始化;
    2.如果在定义时进行初始化,如clcok c1[5]={clock(10,20,30),clock(40,50,60)};对于c1[0],c1[1]这里是复制初始化;
    赋值运算符右边是一个右值,不能获得地址。
    所以这里与右值引用相匹配,让编译器知道使用移动构造函数或者复制构造函数(如果不是自己实现,则是浅复制)(c++11)来初始化对象数组。
    而对于一般的构造对象 clock c1(1,2,3)这里是左值,所以与左值引用相匹配,调用构造函数。

    //这里不是拷贝函数 而是复制构造函数 
    		clock(const clock &p):s(p.s),m(p.m),h(p.h){
    			cout<<"复制构造函数"<<endl;
    		} 
    		//形参若为(clock &p)是指是获取的左值的地址
    		//(而右值是无法获取地址的) 
    		
    		
    		clock( clock &&p):s(p.s),m(p.m),h(p.h){
    			cout<<"移动构造函数"<<endl;
    		}
    		
    		
    		clock(clock &p):s(p.s),m(p.m),h(p.h){
    			cout<<"拷贝构造函数"<<endl;
    			}
    		//是指传的是地址,所以s,m,h得到的是p的原地址 (即浅拷贝) 
    		
    

    在这里插入图片描述
    在这里插入图片描述
    即使编译器忽略了移动/拷贝构造函数,但是在这个程序点上,移动/拷贝构造函数是必须的且是可访问的。
    也就是说如果是右值引用,就必须有相应的移动构造函数,或者复制构造函数。两者至少其中之一。

    展开全文
  • C++对象数组初始化

    千次阅读 2018-01-30 11:18:00
    C++对象数组初始化 类对象 数组 初始化可以使用构造函数初始化,同时类有不同的构造函数,可以对类对象数组元素使用不同的构造函数; posted on 2018-01-30 ...

    类对象 数组 初始化可以使用构造函数初始化,同时类有不同的构造函数,可以对类对象数组元素使用不同的构造函数;

     

     

    posted on 2018-01-30 11:18 秦瑞It行程实录 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/ruiy/p/8384175.html

    展开全文
  • 今天小编就为大家分享一篇C++中静态初始化数组与动态初始化数组详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • class A { public: A(const int a1):aa(a1) { } private: const int aa; }; class B { public: B(const int b1,const int b2,const int b1):aaa(a1) { } private: ...怎么初始化
  • C++对象数组初始化

    万次阅读 2018-11-02 21:13:24
    如何给类中定义了带有参数的构造函数的对象数组赋值 class A { public: A(){}//无参构造函数0 A(int i){}//有参构造函数1 A(int i,int j){}//有参构造函数2 }; int main() { A a,b[5];//调用6次无参构造函数...

    如何给类中定义了带有参数的构造函数的对象数组赋值

    class A
    {
    public:
        A(){}//无参构造函数0
        A(int i){}//有参构造函数1
        A(int i,int j){}//有参构造函数2
    };
    
    int main()
    {
        A a,b[5];//调用6次无参构造函数,若定义了1,2,没有定义0会出错
        A c(1),d[2] = {1,A(1)};//调用了构造函数1,若没有定义构造函数0,则对象数组必须初始化
                               //(必须有=后面的部分,否则提示没有合适的构造函数)
        A e(1,2),f[2] = {A(1,1),A(1,2)};//调用了构造函数2,若没有定义构造函数0,则对象数组必须初始化
                                        //(必须有=后面的部分,否则提示没有合适的构造函数)
    }
        

     

    展开全文
  • C++对象数组初始化

    万次阅读 2019-03-08 14:50:33
    如果一个类有默认的构造函数,使用new动态实例一个对象数组不是件难事,如下代码: class animal { public: animal():num(0) {} ~animal() {} private: int num; }; Animal *ani = new Animal[5]; delete...

    如果一个类有默认的构造函数,使用new动态实例化一个对象数组不是件难事,如下代码:

    class animal
    {
    public:
        animal():num(0)
        {}
        ~animal()
        {}
    private:
        int num;
    };
    
    Animal *ani = new Animal[5];
    delete[]ani;

    然而 new Obj[n]的形式仅仅适用于不需传入实参的默认构造函数,否则编译器报错。想要初始化对象数组的同时指定各个构造函数的参数,有以下几种解决途径:

    1.若初始化对象数组时已知其size,使用诸如 new Obj[n]{(),(),...()} 的形式,大括号内每个小括号对应每个对象的构造函数参数:

    class Array1D
    {
    public:
    	Array1D(int len2)
    		:len2D(len2)
    	{
    		plist = new T[len2];
    		for (int i = 0; i < len2; i++)
    			plist[i] = static_cast<T>(0);
    	}
    	~Array1D()
    	{
    		if (nullptr != plist)
    			delete[] plist;
    	}
    private:
    	T* plist;
    	int len2D;
    };
    
    pArray1D = new Array1D[2]{(1),(2)}

     

    2.若初始化对象数组时未知其size,需要把分配内存和构建对象的动作分开。可借助C++11的allocator。先使用allocate分配内存并用指针记录这块空间;然后用construct方法对指针所指向内存进行对象构建;当然不再使用对象时用destory方法析构对象;注意,既然分配内存和构建对象动作已分开,那么析构对象和释放内存也要配对,用deallocate释放内存:

    class Array2D
    {
    public:
        //class Array1D
        class Array1D
        {...};
    
        //Array2D
        Array2D(int len1, int len2)
            :len1D(len1)
        {
            pArray1D = alloc.allocate(len1);
            for (int i = 0; i < len1; i++) {
                alloc.construct(pArray1D + i, len2);
            }
        }
        ~Array2D()
        {
            for (int i = 0; i < len1D; i++) {
                alloc.destroy(pArray1D + i);
            }
            alloc.deallocate(pArray1D, len1D);
        }
    
    private:
        Array1D* pArray1D;
        int len1D;
        allocator<Array1D> alloc;
    };

     

    3.使用operator new和placement new,与allocator原理类似,分四步走:

    class animal
    {
    public:
        animal():num(0)
    	{}
        animal(int _num):num(_num)
        {}
        ~animal()
        {}
    
        void show() {
            cout << num << endl;
        }
    
        void* operator new(size_t size, void* p)
        {
            return p;
        }
    private:
        int num;
    };
    
    int main(int argc, char* argv[])
    {
        {
            // operator new
            void* p = operator new(5 * sizeof(animal));
            animal* a = static_cast<animal*>(p);
            // placement new, constructor
            for (int i = 0; i < 4; i++)
            {
                new(a + i) animal(i);
            }
            new(a + 4) animal;
            // use
            for (int i = 0; i < 5; i++) {
                (a + i)->show();
            }
            // destructor
            for (int i = 0; i < 5; i++) {
                (a + i)->~animal();
            }
            // delete
            delete[] p;
        }
        return 0;
    }

    参考:https://www.cnblogs.com/SimonKly/p/7819147.html

    展开全文
  • C++数组初始化

    千次阅读 2018-12-28 11:19:39
    C++数组初始化 定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia...
  • #include<iostream> #include<string> #include<vector> #include<iterator> using namespace std; int main(void){ int array[10]={ 0,1,2,3,4,5,6,7,8,9 };...v.end()
  • c++对象数组初始化 C ++对象的动态初始化 (C++ Dynamic Initialization of Objects) The Dynamic Initialization of Objects means to initialize the data members of the class while creating the object. ...
  • C++ 对象数组的声明&初始化

    千次阅读 2018-12-19 16:00:25
    学习C++每次遇到需要进行对象数组声明、初始化的问题都想去翻当初的笔记本,索性这次直接写在这,就懒得去翻了   1. 首先,这是我创建的对象数组train。 看起来一点错误都没有是吧?编译器也没有报错。我就...
  • c++数组初始化vector

    千次阅读 2019-07-24 23:18:41
    数组之间不能相互初始...可以用数组初始化vector对象; #include<iostream> #include<vector> using namespace std; void main() { char a[4] = { 'a','b','c','d' }; vector<char> vec(begin(...
  • C++学习一对象数组初始化

    千次阅读 2017-02-22 10:13:53
    对象数组不可以像如下这样初始化。 Rect arrRect[10](1,2,3,4); 这样的初始化数组是错的。因为这样的写法,编译器不知道你传的参数是传给哪个成员。但是又不能给每个成员都穿这个参数。所以不可以这样。如果不提供...
  • 参考资料: C/C++数组初始化 2、for循环初始化: int arr[26] = {1}; for(int i = 0; i<26;i++){ // 全部初始化为-1 arr[i] = -1; } 3、memset初始化: int arr[26] = {-1}; memset(arr, -1, sizeof(arr))
  • C++字符数组初始化为空

    千次阅读 2019-03-02 11:14:59
    char str[1024] = {0}; 头文件为#include
  • c++数组初始化向量In this article, we’ll take a look at some of the ways to initialize a vector in C++. There are a bunch of ways to do this, so we’ll go through each approach. 在本文中,我们将介绍...
  • 对象数组初始化

    万次阅读 多人点赞 2018-05-05 11:28:56
    对象数组:数组中每个元素为一个对象。在建立数组时,可以在定义数组时提供实参以实现初始化。1、如果构造函数只有一个参数,可以直接在等号后面的花括号内提供实参,如: Student stu【3】={10,20,30};2、如果...
  • C++C++数组初始化方法

    万次阅读 多人点赞 2018-12-17 22:13:55
    定义: int *pia = new int[10];...此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia。 在自由存储区中创建的数组对...
  • C++动态数组初始化 -- new/delete

    万次阅读 2018-06-07 15:03:56
     // array of 10 uninitialized ints此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia。在自由存储区中创建的数组对象是没有名字的,只能...
  • 定义一个关于学生信息的类 ``` class Student {private: char *name;...然后写了一个该类的对象数组 ``` Student stu[N]; ``` 有什么方法能够初始化该对象?除普通构造函数外拷贝构造函数可以吗?
  • 关于C++ new动态创建对象数组初始化的方法 #include <iostream> #include <string> #include <stdlib.h> class student{ private: static int object_count; int score; string name; ...
  • C++对象数组

    千次阅读 多人点赞 2019-09-24 08:24:49
    C++对象数组 一、对象数组 1.C++对象数组的定义:类名 数组名[元素个数] 例:Student stu[10]; 2.对象数组访问形式:数组名[下标].成员名; 例:stu[i].print(); 3.对象数组的初始化:对象数组的初始化通常也...
  • C++数组初始化,

    2019-11-15 16:46:06
    定义在函数体内的内置类型的对象(局部变量),如果没有显示初始化,则其值是未定义的,访问它是危险的int a2[10]; 如果使用static修饰(局部静态变量),则会自动初始化成默认值0 static int a4[10]; 或者手动初始...
  • C++11中的数组初始化

    千次阅读 2019-03-15 09:59:16
    此new表达式分配了一个含有 10 个int型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针pia。 在自由存储区中创建的数组对象是没有名字的,只能通过其地址间接地访问堆中的对象。 注意:C++...
  • C++自定义类的对象数组初始化

    千次阅读 2015-03-20 15:48:42
    C++类的对象数组初始化与基本数据类型的数组初始化差不多,具体如下: Point是自己写的类,它的初始化形式为: Point p[5] = { Point(10, 200), Point(200, 200), Point(30, 20), Point(105, 240), ...
  • 对象数组初始化

    千次阅读 2019-04-13 07:59:35
    学堂在线 c++程序设计 郑莉 第六章数组 指针 ...对象数组初始化 数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。 通过初始化列表赋值。 例:Point a[2]={Point(1,2),Point(3,4)}; ...
  • C++ 对象数组

    2021-06-10 20:33:49
    对象数组 学过C语言的读者对数组的概念应该很熟悉了。数组的元素可以是int类型的变量,例如 int array[128]; 就是定义一个整型数组的每一个元素都是整型变量,数组的元素也可以是一个类对象,例如: class test...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,762
精华内容 65,504
关键字:

c++对象数组初始化

c++ 订阅