一 概述 我们既然可以在堆中保存变量,那么也就可以保存对象,我们可以将对象保存在堆中,然后通过指针来访问它。
二 代码及结果输出 2.1 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include<iostream> using namespace std; class Human { private: int i; public: Human() { cout << "在构造函数执行中。。" << endl; i = 999; } }; int main() { Human *p=new Human; return 0; }
2.2 输出结果
2.3 说明
Human *p:该行定义了一个Human类的指针p
p=new Human;该行使用new 创建一块内存空间,同时又调用了Human类的默认构造函数来构造一个对象,它所占用的内存大小根据Human类对象的成员变量来决定,假如该类有两个int型成员变量,那么该对象占用为2乘以4等于8个字节
构造函数一般都是在创建对象时被自动调用,它的作用就是初始化该对象的成员数据。本行的右半部分创建一个对象完毕后,跟着将该对象的内存地址赋给左边的指针变量p
这两行语句也可以合并为一句:Human *p=new Human;在定义一个Human类指针p的同时将它的值初始化为新建Human类对象的内存地址
2.4 过程
使用new Human在堆中创建一个类Human的对象
由于创建对象时会自动调用类的构造函数来初始化对象的成员数据,这里调用构造函数,调用的结果是将i初始化为999
new Human的右半部分在堆中创建对象完毕后,就会返回该对象的地址,这个地址赋给了左边的指针变量p
在堆中创建的对象时匿名的,它没有名字,我们无法直接访问它,只能通过指针来访问它,指针记录了堆中对象的地址,所以只有指针才能找到该对象