读书人

关于C++建立动态对象数组 没有异常

发布时间: 2013-09-15 19:58:13 作者: rapoo

关于C++建立动态对象数组 没有错误,但是输出结果不对
#include<iostream>
using namespace std;
class Student
{
public:
Student(int,int);

void display();
private:
int number;
int score;
};


Student::Student(int a,int b)
{
number=a;
score=b;
}
void Student::display()
{cout<<number<<":"<<score<<endl;}
int main()
{

Student* p= new Student[5]; //在这里想动态建立数组并且指向第一个元素,为什么报错,但是如果在定义一个默认的空构造函数就不报错了,只是输出结果不对,应该是没能指向第一个对象,怎么改啊!
Student student[5]={Student(1,89),Student(2,92),Student(3,98),Student(4,95),Student(5,81)};

int i;
for(i=0;i<5;i=i+2)
{

p[i].display();

}

cout<<endl;
delete p;
return 0;
}
c++ 对象数组 动态
[解决办法]
需要默认构造函数,否则数组对象无法构造。
如果你的编译器支持 c++11 的话,可以试一下这样。


Student* p= new Student[5]{{1,89},{2,92},{3,98},{4,95},{5,81}};

[解决办法]
有两个问题。
(1) 默认构造函数得干点儿实事儿,需要初始化数据成员。Student::Student() : number(0),score(0) { }
(2) 默认构造函数只能将对象初始化为一个固定的状态,不可能自动的生成五个不同的状态。你需要进一步赋值操作才能够达到目的。#1 那样的写法正是解决了这种两步初始化的问题。
[解决办法]
new 一个类的对象数组,该类必须有定义默认构造函数,你没定义默认构造函数,所以阻止了编译器自动生成一个默认构造函数,就无法创建对象数组了
[解决办法]
new 一个类的对象数组,该类必须有定义默认构造函数
[解决办法]
你的*p和下面的student[5]没有任何关系好吧,而p指向的数组有没有初始化。

读书人网 >C++

热点推荐