C++学习-对象数组

来源:互联网 发布:丰趣海淘 知乎 编辑:程序博客网 时间:2024/05/21 14:58

先上个代码

#include<iostream>#include<string>using namespace std;class Student{public:Student() :m_strName("Adison"), m_intnumber(20318){cout << "Student" << endl;}Student(const Student&stu) :m_strName("Alice"), m_intnumber(20301){setName();cout << "copy Student" << endl;}string printfName(){return m_strName;}int printfNum(){return m_intnumber;}void setName(){m_strName = "auto";}void setName2(string a){m_strName = a;}~Student(){cout << "~Student" << endl;}private:string m_strName;int m_intnumber;};void copy(Student a){}int main(){Student stu1;cout << stu1.printfName() << endl;Student *stu2 = new Student[3];cout << stu2[0].printfName() << endl;cout << stu2[1].printfName() << endl;cout << stu2[2].printfName() << endl;delete[]stu2;stu2 = NULL;system("pause");}

我觉得用栈来初始化对象数组是没有问题的,但是用堆就会有点问题。

我们经常是 Student*stu2=new Student[3]这样子,这个是没有问题的。

但是之后我就开始想使用指针的方法来调用每一个对象的成员函数

例如stu2[0]->printfName()这样子,但是我后来发现一个问题!

stu2[0]根本就,不是,一个指针啊!!!!!!

在这里,指针应该是stu2!

所以我们可以用stu2->printfName()这样子调用第一个对象的成员函数。

然后我们可以使用类似(stu2+1)->printfName()这样子调用第二个对象的成员函数

但是这里有另外一个问题

那就是,如果你使用了stu2++这一种方法。。。。。。

那么你stu2->printfName()这样子,就是访问第二个对象的成员函数了。

另外一个要注意的是

自增以后stu2++以后,stu2[0]现在这样子你访问的是第二个对象!而不是第一个对象了!

这是需要注意的!

我的代码好像三个对象的内容都一样的-3-。。。


另外啰嗦说一下。。。。大家如果想用堆的方法来创建一个东西,anyway,什么东西,都要遵循

判断申请是否成功

用完了之后delete

然后再把申请的指针指到NULL

这是一个好习惯啊~~~!!~!~!

原创粉丝点击