类和对象

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;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱嵌入式的小佳同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值