C++相关知识

本文探讨了C++中创建类对象的两种方式:栈对象和堆对象,详细阐述了构造过程,帮助读者理解C++面向对象编程中的关键概念。

分享一些C++创建类对象的一些细节

首先创建一个类

class A
{  
	int num;
public:  
	A(int num =0):num(num)
	{cout<<"A num="<<num<<endl;}
};

1、构造—栈对象

A a();//仅仅声明了函数,不生成对象
A b;//无参 生成栈对象
A c(2);//有参 生成栈对象 num=2
A d[10];//无参 构造10个栈对象
A e[10](2);//有参 生成10个栈对象 num均等于2
//A e(2)[3];// 编译时候报错:expected ‘,’ or ‘;’ before ‘[’ token

2、构造—堆对象

A *c = new A();//带括号,无参 申请堆对象
A *d = new A;//不带括号,无参 申请堆对象,效果同上
A *e = new A(4);//带参 申请1块A类大小的堆内存,生成1个堆对象 num=4
A *f = new A[10];//无参 申请了10块堆对象大小的内存 生成10个堆对象
A *j = new A[5]{1,2,3};//带参 申请5块堆对象大小内存 生成5个堆对象 num分别为为1,2,3,0,0 同数组初始化 
//和申请栈空间不同,可能因为指针(Pointer)是指向一个连续区域的堆空间,对()仅仅是对一个参数的直接初始化,而new A[]   //应该是在对整体的初始化,所以在G++编译器认为 仅仅一个A的数字无法满足对所有数组的个数的分配。 
//但是{} 的分别初始化却是对指针(Pointer)所指向的数组中的每一个元素进行初始化
//A *j = new A(4)[2];//编译时候报错:expected ‘,’ or ‘;’ before ‘[’ token
//A *j = new A[2](4);//编译时候报错:parenthesized initializer in array new [-fpermissive]

如果感觉不错的话,给个关注和赞吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值