我们既然可以在堆中保存变量,那么也就可以保存对象,我们可以将对象保存在堆中,然后通过指针来访问它。
#include <iostream>
using namespace std;
int main()
{
Human *p;
p=new Human;
return 0;
}
第一行定义了一个Human类的指针p,第二行使用new创建一块内存空间,同时又调用了Human类的默认构造函数来构造一个对象,它所占用的内存大小根据Human类对象的成员变量来决定,假如该类有两个int型成员变量,那么该对象占用为2乘以4等于8个字节。构造函数一般都是在创建对象时被自动调用,它的作用就是初始化该对象的成员数据。本行的右半部分创建一个对象完毕后,跟着将该对象的内存地址赋给左边的指针变量p。
这两行语句也可以合并为一句。
#include <iostream>
using namespace std;
int main()
{
Human *p=new Human;
return 0;
}
在定义一个Human类指针p的同时将它的值初始化为新建Human类对象的内存地址。
我们来看实例程序。
#include <iostream>
using namespace std;
class Human
{
public:
Human(){cout<<"构造函数执行中......\n";i=999;}
private:
int i;
};
int main()
{
Human *p=new Human; //使用new Human在堆中创建一个类Human的对象。
return 0;
}
由于创建对象时会自动调用类的构造函数来初始化对象的成员数据,因此这里调用第6行的构造函数,调用的结果是将i初始化为999,并输出了一行汉字:“构造函数执行中......”。
第12行的右半部分在堆中创建对象完毕后,就会返回该对象的地址,这个地址赋给了左边的指针变量p。
在堆中创建的对象是匿名的,它没有名字,我们无法直接访问它,只能通过指针来访问它。
指针记录了堆中对象的地址,所以只有指针才能找到该对象。
本节我们主要学习如何在堆中创建一个对象,下节将学习如何删除堆中对象。