c++类的问题
classPerson;和classPerson{...}有什么区别?为什么第一种类没有主体都不报错呢?还有我在测试第一种类时候,Personp报错,而Person*p就...
class Person;和class Person{...}有什么区别?为什么第一种类没有主体都不报错呢?还有我在测试第一种类时候,Person p报错,而Person *p就没有错!我是刚接触c++,这种情况不能理解,请大神指点一二!谢谢!
展开
2个回答
展开全部
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;的前面)。
你现在不太懂没关系,以后会慢慢弄明白的。
而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;的前面)。
你现在不太懂没关系,以后会慢慢弄明白的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询