1.什么是类和对象
(1)类是一种用户定义的引用数据类型,也称类类型,类是由对象总结而来的,总结的这个过程叫做抽象
(2)对象 : 类的一种具象,对象是由类具体实施出来的,这个过程叫做实例化
2.对象和类的关系
类与对象的关系就如模具和铸件的关系,类的实力化的结果就是对象,而对对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。
3.类和结构体的区别
- 结构体是值类型,类是引用类型
- 结构体存在栈中,类存在堆中
- 结构体成员不能使用protected访问修饰符,而类可以
- 结构体成员变量申明不能指定初始值,而类可以
- 结构体不能申明无参的构造函数,而类可以
- 结构体申明有参构造函数后,无参构造不会被顶掉
- 结构体不能申明析构函数,而类可以
- 结构体不能被继承,而类可以
- 结构体需要在构造函数中初始化所有成员变量,而类随意
- 结构体不能被静态static修饰(不存在静态结构体),而类可以
4.代码理解
(1)第一种写法
#include <stdio.h> //类:抽象 模板 struct Animal { char name[128]; int age; int sex; void (*peat)(); void (*pbeat)(); }; void dogEat() { printf("dog eat\n"); } void catEat() { printf("cat eat\n"); } void personEat() { printf("person eat\n"); } void dogBeat() { printf("dog beat\n"); } void catBeat() { printf("cat beat\n"); } void personBeat() { printf("person beat\n"); } int main() { struct Animal dog; struct Animal cat; struct Animal person;//对象:事物的具象 dog.peat = dogEat; cat.peat = catEat; person.peat = personEat; dog.pbeat = dogEat; cat.pbeat = catEat; person.pbeat = personEat; dog.peat(); cat.peat(); person.peat(); dog.pbeat(); cat.pbeat(); person.pbeat(); return 0; }
(2)第二种写法(结构体新写法)
#include <stdio.h> //类:抽象 模板 struct Animal { char name[128]; int age; int sex; void (*peat)(); void (*pbeat)(); }; void dogEat() { printf("dog eat\n"); } void catEat() { printf("cat eat\n"); } void personEat() { printf("person eat\n"); } void dogBeat() { printf("dog beat\n"); } void catBeat() { printf("cat beat\n"); } void personBeat() { printf("person beat\n"); } int main() { struct Animal dog = { .peat = dogEat, .pbeat = dogBeat }; struct Animal cat = { .peat = catEat, .pbeat = dogBeat }; struct Animal person = { .peat = personEat, .pbeat = personBeat }; dog.peat(); cat.peat(); person.peat(); dog.pbeat(); cat.pbeat(); person.pbeat(); return 0; }