标题:对象数组动态分配时怎么初始化?
只看楼主
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
结帖率:56.6%
已结贴  问题点数:1 回复次数:2 
对象数组动态分配时怎么初始化?
//对象数组的动态分配+初始化+构造函数,这里到底是哪里出错了?
#include<iostream>
using namespace std;

class Square
{
public:
     double a;
     double Area();
     Square(double x); //构造函数
     ~Square();
};

double Square::Area()
{
    return a*a;
}

Square::Square(double x) //构造函数
{
    a=x;
}

Square::~Square()
{
    cout<<"array ends"<<endl;
}

int main()
{
    Square *q=new Square[3];  //我想申请一个Square类 类型的动态数组,有3个元素。 但这里总是报错!!不知道为什么?
    q[0]=Square(2);
    q[1]=Square(3);  //通过构造函数把初始值3 赋值给q[1]对象中的数据成员a
    q[2]=Square(4);

    for(int i=0;i<3;i++)
    {
        cout<<q[i].a<<"\t"<<q[i].Area()<<endl;
    }
    delete[]q;
    return 0;
}
搜索更多相关主题的帖子: 对象 数组 初始化 构造函数 double 
2018-04-11 10:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:1 
Square *q = new Square[3]
中构造 Square 的参数是什么,也就是调用 Square::Square(double x) 时这个x值是多少?

方法一:添加缺省构造函数,其它保持不变
class Square
{
public:
    explicit Square( double length=0 ) : length(length)
    {
    }
    double Area() const
    {
        return length*length;
    }

    double length;
};

#include <iostream>
using namespace std;

int main( void )
{
    Square* p = new Square[3];
    p[0] = Square(2);
    p[1] = Square(3);
    p[2] = Square(4);

    for( size_t i=0; i!=3; ++i )
        cout << p[i].length << '\t' << p[i].Area() << endl;

    delete[] p;
}

方法二:不添加缺省构造函数,new[]时指定参数
class Square
{
public:
    explicit Square( double length ) : length(length)
    {
    }
    double Area() const
    {
        return length*length;
    }

    double length;
};

#include <iostream>
using namespace std;

int main( void )
{
    Square* p = new Square[3]{ Square(2), Square(3), Square(4) };

    for( size_t i=0; i!=3; ++i )
        cout << p[i].length << '\t' << p[i].Area() << endl;

    delete[] p;
}

其实,我一直想说,C++中有 std::unique_ptr等,有 std::vector等,为什么你要自己new?


[此贴子已经被作者于2018-4-11 12:42编辑过]

2018-04-11 12:39
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:0 
程序代码:
int main()
{
    Square **q=new Square *[3];  //我想申请一个Square类 类型的动态数组,有3个元素。 但这里总是报错!!不知道为什么?
    q[0]=new Square(2);
    q[1]=new Square(3);  //通过构造函数把初始值3 赋值给q[1]对象中的数据成员a
    q[2]=new Square(4);

    for(int i=0;i<3;i++)
    {
        cout<<q[i]->a<<"\t"<<q[i]->Area()<<endl;
    }
    for(auto i = 0; i < 3; i++) {
        delete q[i];
    }
    delete []q;
    return 0;
}

第一个指针指向数组
第二个指针指向对象
2018-04-11 17:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-485954-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023165 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved