22_对象数组
程序员文章站
2024-02-29 23:27:22
...
1、对象数组 本质是数组 只是数组的每个元素是类的对象
运行结果:
2、如果想让对象数组中的元素调用有参构造 必须人为使用 有参构造初始化
void test07()
{
//对象数组 arr1是数组 每个元素是Person类型的对象
//定义对象数组的时候 系统会自动给 数组中的每个元素 调用构造函数
//人为 为元素 调用有参构造
//初始化部分 调用有参构造 未初始化部分自动调用默认构造(无参构造)
Person arr1[5]={ Person("lucy",18), Person("bob",20)};
//arr1[0] 第0个元素 就是Person的对象
arr1[0].showPerson();
arr1[1].showPerson();
}
运行结果:
3、用new delete申请 对象数组
void test08()
{
//第一种方式
Person *arr = NULL;
arr = new Person[5];//调用无参构造
delete [] arr;
//第二种方式:
//初始化的元素 调用有参构造 没有初始化 的调用无参构造
Person *arr2 = new Person[5]{Person("lucy",18), Person("bob",20)};
(*(arr2+0)).showPerson();
arr2[0].showPerson();
(arr2+1)->showPerson();
delete [] arr2;
}
4、尽量不要用delete释放void *
注意:没有析构?为哈?
delete发现p1指向的类型 为void 无法从void中寻找响应析构函数
5、malloc、free和new、delete 不可以混搭使用
下一篇: 运行时多态和编译时多态