精华内容
下载资源
问答
  • new创建对象数组
    万次阅读 热门讨论
    2018-07-17 20:24:40

    推荐用vector。

    参考此文:https://stackoverflow.com/questions/255612/dynamically-allocating-an-array-of-objects

    object *p = new object[3];

    p[0] = 

    p[1] = 

    上述情况是否需要定义构造函数?答案是不需要(有默认构造函数就足够了)。如果对象有用户自定义的构造函数,new可以同时对对象初始化。但是,不能用在对象数组上。
    An optional initializer field is included in the grammar for the new operator. This allows new objects to be initialized with user-defined constructors.No explicit per-element initialization can be done when allocating arrays using the new operator; only the default constructor, if present, is called.
    https://docs.microsoft.com/en-us/cpp/cpp/new-operator-cpp?view=vs-2017

    // expre_Initializing_Objects_Allocated_with_new.cpp
    class Acct
    {
    public:
        // Define default constructor and a constructor that accepts
        //  an initial balance.
        Acct() { balance = 0.0; }
        Acct( double init_balance ) { balance = init_balance; }
    private:
        double balance;
    };
    
    int main()
    {
        Acct *CheckingAcct = new Acct;
        Acct *SavingsAcct = new Acct ( 34.98 );
        double *HowMuch = new double ( 43.0 );
        // ...
    }

    new object不对对象进行初始化。

    new object(parameters)显示调用构造函数初始化对象。

    如果没有定义默认构造函数,也可以用new动态定义对象数组,参考https://www.cnblogs.com/SimonKly/p/7819147.html

    如果类

    class A

    {

            B * pointer_toB;

    pointer_toB,默认构造函数将其初始化成啥?

    更多相关内容
  • 事实上在C++11有了列表初始化之后new创建对象数组也可以使用自定义的构造函数进行初始化了,方法和基本数据类型也一样。

    首先说明,如果可以使用vector则直接用vector的构造函数就可以在创建对象的时候用自定义的构造函数,若非得使用new创建对象数组才有这个初始化问题。

    new使用默认构造函数创建对象数组和创建基本数据类型数组的方法一样:

    int *p1 = new int[10]; //基本数据类型
    
    A * ap = new A[10]; //使用默认构造函数创建A对象数组
    

    看到另一个博主说在new创建对象数组的时候不能使用自定义的构造函数对每个元素进行初始化,只能用默认构造函数。

    这个结论是错误的

    事实上在C++11有了列表初始化之后new创建对象数组也可以使用自定义的构造函数进行初始化了,方法和基本数据类型也一样。

    int *p1 = new int[10]{12345678910}; //基本数据类型
    
    A * ap = new A[10]{12345678910}; //使用默认构造函数创建A对象数组
    
    

    实例如下:

    #include <iostream>
    
    using namespace std;
    
    class A{
    private:
        int data;
    public:
    	A(){}
        A(int x):data(x){}
        A(const A& a){this->data=a.data;}
        void print(){cout<<data<<endl;}
    };
    
    
    int main()
    {
        int *x = new int[10]{1,2,3,4,5,6,7,8,9,10};
        A * ap = new A[10]{1,2,3,4,5,6,7,8,9,10};
    
        for(int i=0;i<10;++i) {
            (ap+i)->print();
    
            cout<<"!!"<<x[i]<<endl;
        }
        delete []x;
        delete []ap;
        return 0;
    }
    
    

    结果如图:
    在这里插入图片描述
    但是要注意,如果这里给我们的拷贝构造函数改成explicit,会导致无法运行并报错:

    error: no matching function for call to 'A::A(A)'|

    若去掉explicit或者直接使用默认生成的拷贝构造函数却可以正常运行。

    可能是内部使用了隐式转换?欢迎大佬指点解答。

    展开全文
  • C++ 动态创建对象数组

    2021-01-06 20:05:10
    使用运算符 new 也可以创建数组类型的对象,用 new 运算符动态创建一维数组的语法形式为: new 类型名 [数组长度]; #include <iostream> using namespace std; class Point{ private: int x, y; ...

    使用运算符 new 也可以创建数组类型的对象,用 new 运算符动态创建一维数组的语法形式为:

    new 类型名 [数组长度];
    
    #include <iostream>
    using namespace std;
    
    class Point{
    	private:
    		int x, y;
    	
    	public:
    		Point(): x(0), y(0){
    			cout << "默认构造函数调用." << endl;
    		}
    		
    		Point(int x, int y) : x(x), y(y){
    			cout << "有参构造函数调用." << endl;
    		}
    		
    		~Point(){
    			cout << "析构函数调用." << endl;
    		}
    		
    		int getX() const{
    			return x;
    		}
    		
    		int getY() const{
    			return y;
    		}
    		
    		void move(int x, int y){
    			this -> x = x;
    			this -> y = y;
    		}
    };
    
    int main(){
    	Point *point = new Point[2];   // 创建对象数组  还可以这么写 Point *point = new Point[2]();
    	point[0].move(25, 15);     // 通过指针访问数组元素的成员
    	point[1].move(35, 45);   // 通过指针访问数组元素的成员
    		
    	delete[] point;   // 删除整个对象数组 
    	
    	return 0;
    }
    

    注:

    • 用 new 动态创建一维数组时,在方括号后仍然可以加小括号“()”,但小括号内不能带任何参数。是否加"()“的区别在于,不加”()",则对数组每个元素的初始化,与执行"new T"时所进行初始化的方式形同;加“()”,则与执行"new T()"所进行初始化的方式相同。
    • 如果使用 new 创建的数组,用 delete 删除时在指针名前面要加上"[]"。
    	delete[] 指针名;
    
    展开全文
  • new创建数组

    千次阅读 2021-12-23 14:41:15
    由于new创建对象是在运行时确立的,所以有着具体情况具体分析的优点,那么什么叫做具体情况具体分析呢?我觉得c++ primer plus的一个例子十分贴切——比如你在度假,已经做好每天的参观计划,可突然有一天天气不好...

    用new创建数组

    用new创建数组的优势

    由于new创建的对象是在运行时确立的,所以有着具体情况具体分析的优点,那么什么叫做具体情况具体分析呢?我觉得c++ primer plus的一个例子十分贴切——比如你在度假,已经做好每天的参观计划,可突然有一天天气不好或你心情不好,此时你就不想参观了,如果此时是在编译状态,系统是不允许的,你必须按照计划去参观,但运行时状态,系统是允许的,此时你就可以呆在酒店尽情的玩耍了。用new创建数组也有此优点,即数组长度可以根据情况而定。

    比如说创建10个元素的数组,可以如下代码定义:

    int* ptr = new int[10];

    但不能写成一下代码:

    int* ptr = new int[];

    为什么呢?

    因为此时如果再new一个动态数组,内存就不好分配了,如果你不知道需要多少元素个数,可以这样写:

    int n;

    int* ptr = new int[n];

    cin >> n;

    Q:假如我已经确定要建立7个元素了,但我手欠,少输入了了两个元素,那new会新建7个元素的内存,还是5个

    A:会新建7个,而且如果不对这7个元素赋值,其默认的值是0,可根据一下代码证明:

    #include<iostream>
    using namespace std;
    
    int main() {
        int* ptr = new int[7];
        ptr[0] = 1;
        ptr[1] = 2;
        ptr[2] = 3;
        ptr[3] = 4;
        ptr[4] = 5;
        cout << "ptr + 4 = " << ptr + 4 << endl;
        cout << "ptr[5] = " << ptr[5] << endl;
        cout << "ptr + 5 = " << ptr + 5 << endl;
        cout << "ptr[6] = " << ptr[6] << endl;
        cout << "ptr + 6 = " << ptr + 6 << endl;
    
        delete [] ptr;
        return 0;
    }![1](F:\图片\1.PNG)
    
    

    实现结果如下

    在这里插入图片描述

    Q:假如我又手欠了,多输入了一个元素,如果delete以后,这两个的内存会被释放掉吗

    A:会的

    可以以下代码证明

    #include<iostream>
    using namespace std;
    
    int main() {
        int* ptr = new int[2];
        int* ps;
        ps = ptr;
        ptr[0] = 1;
        ptr[1] = 2;
        ptr[2] = 3;
        ptr[3] = 4;
        ptr[4] = 5;
        cout << "释放前:\n";
        ps = ps + 2;
        cout << "addr = " << ps << endl;
        cout << "value = " << *ps << endl;
        
        delete [] ptr;
        cout << "释放后:\n"; 
        
        cout << "addr = " << ps << endl;
        cout << "value = " << *ps << endl;
        
        return 0;
    }
    
    

    代码执行结果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-afM2IEx9-1640241670545)(F:\图片\2.PNG)]

    << endl;

    return 0;
    

    }

    
    代码执行结果
    
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/811be136acf5423aa6d998b0dc7e9da5.png#pic_center)
    
    
    
    展开全文
  • 对象数组的概念: 如果一个数组中的元素是对象类型,则称该数组为对象数组。 当需要一个类的多个对象时,应该用该类的对象... 为对象数组分配内存空间: 对象数组名=new 类名[数组长度];//注意 :此处不是构造方...
  • java中怎么创建对象数组

    千次阅读 2021-02-12 15:42:42
    展开全部首先我62616964757a686964616fe78988e69d8331333365646235们需要创建一个class:classStudent{Stringname;doublescore;Stringnum;Student(Stringn,doubles,Stringm){name=n;s=score;num=m;}...
  • 关于C++ new动态创建对象数组并初始化的方法 #include <iostream> #include <string> #include <stdlib.h> class student{ private: static int object_count; int score; string name; ...
  • 创建对象数组的方法

    千次阅读 2022-02-08 16:35:28
    先写一个需要的类,比如就写一个学生类的对象数组 public class Student { public String number; public int grade; public String name; } 再创建一个对象 public class stuArray { public static void ...
  • 我正在尝试在php中创建一个对象数组,并且好奇我将如何去做.任何帮助都会很棒,谢谢!这是将包含在数组中的类class hoteldetails {private $hotelinfo;private $price;public function sethotelinfo($hotelinfo){$this...
  • JAVA创建对象数组

    千次阅读 2022-01-10 20:35:36
    先定义一个整形数组: 1. int[] arr = new int[10];...整形数组用来存储整形数据,同理,所谓对象数组,就是用来存储对象的数组,即一个对象为对象数组的一个元素,并且对象数组的默认值是“null”。
  • Java自定义类创建对象数组并赋值

    千次阅读 2021-12-22 15:41:03
    一、起因     采用下面的代码为对象数组里面的每个元素的字段赋值时报错。... //创建对象数组,没有显式初始化,stuArr存储地址 for(int i = 0; i < stuArr.length; ++i){
  • C#中创建对象数组

    千次阅读 2021-02-01 11:14:16
    定义一个学生类,使用多种形式的构造函数实现初始化学生对象,要求有姓名,班级 分数 // 封装方法求平均数,对分数升序,降序排列 namespace _20210201day4作业 { class Program { class student { private string ...
  • Java中创建对象数组

    千次阅读 2021-01-16 16:52:24
    1.对象数组的概念: 如果一个数组中的元素是对象...类名[ ] 对象数组名 = new 类名[ 数组大小] 以创建Student类的对象数组为例 Student[] stu = new Student[20]; //创建20个学生对象 对学生类的每一个数组元素进行
  • C++ 动态对象创建 对象数组

    千次阅读 2021-03-27 20:54:52
    首先说说内存申请函数: malloc、calloc、realloc返回一个 void 指针,C++不允许将 void 指针赋值给其他任何指针,必须强转。...new 与 malloc函数相比,其主要的优点是, new 不只是分配了内存,它还创建对象new
  • C++使用new创建动态数组

    千次阅读 2020-04-13 22:39:33
    在C++中,我们可以通过new来声明动态数组,示例如下: int* ptr = new int [10]; 通过这一行代码,我们即可实现声明一个int类型,元素个数为10个的指针,ptr指向当前动态数组的第一个元素,若想要访问动态数组的...
  • 创建对象数组

    千次阅读 2019-02-05 01:11:36
    对象数组的声明有两种方式 一,先定义,再开辟空间 ...对象数组名 = new 类名称[长度]; StudentOfSoftware students[] = null; students=new StudentOfSoftware[5]; 二,定义并开辟数组 同样先构造了一个类Studen...
  • C++创建类对象方法和动态对象数组

    千次阅读 2019-03-17 16:03:57
    C++中有两种创建对象的方法,一种是直接声明,另一种则是使用new关键字,虽然作用相同,但是它们底层的存储方式却完全不同。在此之前,我们先了解一下C++程序的存储形式。 C++程序的内存格局通常分为四个区: 1. ...
  • 使用new创建动态数组

    千次阅读 2019-10-02 03:40:35
    使用new创建动态数组(1) 如果程序只需要一个值,则可能会声明一个简单变量,因为对于管理一个小型数据对象来说,这样做比使用new和指针更简单,尽管给人留下的印象不那么深刻。通常,对于大型数据(如数组、...
  • 1、如何使用C++的new运算符创建数组 创建一个包含10个int元素的数组 int * psome = new int [10]; 程序使用完new分配的内存块时,应该用delete释放 delete [] psome; 使用new和delete时,应遵守以下规则: 1、不要...
  • 用Java创建对象数组

    千次阅读 2021-02-12 09:46:26
    这就是你得到NullPointerException的原因你需要单独创建对象并分配引用。在Java中创建数组有3个步骤 -声明 - 在此步骤中,我们指定数据类型和要创建的数组的维度。但请记住,我们还没有提到尺寸的大小。他们是空的。...
  • C# 创建类的对象数组

    万次阅读 2019-02-12 22:52:32
    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;...namespace _0606_创建类的对象数组 { class Program { static void Main(string...
  • C++对象数组的正确创建方式

    万次阅读 2019-06-28 16:41:02
    类类型数组和数据类型数组创建方式相同。分为栈中创建和堆中创建
  • 结论今天一反常态,先说结论——会!,探究这个问题的起因是工作中遇到了这个问题。本来记得new一个对象一般情况下会调用这个对象的构造函数,可是一时间记不清楚数组会不会调用了,于是决定试一下
  • 主要介绍了Java中对象数组的使用方法,结合实例形式分析了java对象数组的功能、定义、初始化与相关使用技巧,需要的朋友可以参考下
  • 用VB创建一个对象数组

    万次阅读 2019-06-22 11:59:12
    ’我们想要创建一个由18个good对象组成的类 Dim Goods() As good = New good(17) {} Label1.Text = Goods(0).Name1 如果我们这样创建数组 result: 正确方法: Dim Goods(17) As Good ‘当然 For i As Integer =...
  • 使用new可以新建类的单个和多个对象,如下:class Obj{ Obj(); Obj(int x); ...}void Test(void){ Obj *a=new Obj; Obj *b=new Obj(1); //初值为1 Obj *c=new Obj... //创建100个动态对象 Obj *c=new Obj[100](1)...
  • Js Vue 对象数组创建方式

    千次阅读 2021-04-29 01:09:25
    config:{ contactCode:'code',//合约代码 leverage:10,//杠杆倍数 ... },//合约代码数组默认参数 $.each(codeArr,function (i,v){ let config = app.config;config.contactCode = v; let par.
  • kotlin 定义对象数组 我最初打算写这篇文章是因为我在玩一些反射代码,并认为自己发现了一些有趣的东西。 las,绝对不是这样。 相反,它只是Kotlin的基本功能,我不需要使用或关注。 尽管这篇文章并没有表明我希望...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 917,917
精华内容 367,166
关键字:

new创建对象数组

友情链接: an.zip