先上个代码
#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
这是一个好习惯啊~~~!!~!~!