c++类的问题

classPerson;和classPerson{...}有什么区别?为什么第一种类没有主体都不报错呢?还有我在测试第一种类时候,Personp报错,而Person*p就... class Person;和class Person{...}有什么区别?为什么第一种类没有主体都不报错呢?还有我在测试第一种类时候,Person p报错,而Person *p就没有错!我是刚接触c++,这种情况不能理解,请大神指点一二!谢谢! 展开
 我来答
microroom
科技发烧友

2018-08-26 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1547万
展开全部
class Person;是声明。当你要使用类Person时,如果Person的定义在使用位置的后面,就可以像这样告诉c++编译器,Person是一个类,但它的定义在后面,这就像函数的声明一样。
而class Person{...};是真正的定义。

Person p;是在创建一个类Person的对象,c++编译器只有在完整的知道了类Person的定义后才能创建它的对象,因为只有知道了完整的定义后,才能知道要为p分配多少内存。
而Person *p;是声明一个指向类Person的指针,声明指针只需要告诉c++编译器Person是一个类就行了,因为声明指针不会真正创建类Person的对象。

总结:
声明指针Person *p;只需在声明之前告诉编译器Person是个什么东西,这可以通过class Person;类的声明实现。
而定义对象Person p;在定义p之前,编译器必须知道类Person的完整定义(即类Person的定义必须在语句Person p;的前面)。

你现在不太懂没关系,以后会慢慢弄明白的。
zhao3132453
2018-08-26 · TA获得超过208个赞
知道小有建树答主
回答量:367
采纳率:89%
帮助的人:86.6万
展开全部
第一种只有声明,第二种有实现
所以第一种直接使用是不行的,要先实现。
Person p 已经是创建对象了,所以必须要有实现
Person *p只是声明没问题,但是Person *p = new Person;创建对象的时候就必须有构造函数的实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式