韦东山—C++快速入门—第一课_类的引入

1.C++基础知识

1.1 class是对struct的扩展

C语言在嵌入式中已经是非常的强大,Linux内核都是使用C语言进行编写的,为什么还要引入C++,引入类的呢?

请看下面的问题:

1.类的引入 :
	C语言是面向过程的
	写一个程序输出张三,李四两个人的姓名和年龄。
#include <stdio.h>

int  main(int argc ,char **argv)
{
	char * zs_name = "zhangsan";
	int  zs_age = 10;

	char * ls_name = "lisi";
	int ls_age = 16;
	
	printf("name=%s ,age=%d\n", zs_name, zs_age);
	printf("name=%s ,age=%d\n", ls_name, ls_age);
	while (1)
	{	
	}	
}

作为一个C语言的初学者,写成这个样子,没有问题,可以。但是一个学了几年的人来讲,这个是不可以的。这个写法太丑了
假设需要你输出更多的人的信息呢?

#include <stdio.h>
int  main(int argc, char **argv)
{
	char *names[] = { "zhangsan","lisi" };
	int ages[] = { 10,16 };
	char *work[] = {"teacher","doctor"};
	int i = 0;
	for (i = 0; i < 2; i++)
	{
		printf("name=%s,gae=%d,work=%s\n",names[i],ages[i], work[i]);
	}
}

如上述的写法你就会节约很多的时间!!并且代码看上去更加的紧凑。
但是目前已经有了姓名,年龄,职业,等等,如果你需要一直向上添加信息的话,这样的写法就会出现问题了。
因为你要写很长很长,修改起来非常的麻烦,现在需要你去重新的想,,结构体咋样???

#include <stdio.h>

struct person
{
	char *name;
	int age;
	char *work;
};

int  main(int argc, char **argv)
{
	struct person  persons[]=
	{
		{"zhangsan",10,"teacher"},
		{"lisi",15,"doctor"},	
	};

	printf("采用结构体的方式\n");

	int i = 0;
	for (i = 0; i < 2; i++)
	{
		printf("name=%s,gae=%d,work=%s\n", persons[i].name, persons[i].age, persons[i].work);
	}
}

如上述的代码,在结构体中,我们仅仅是只是定义了属性,那么我们可不可以进行在结构体中定义函数呢???肯定是可以的!!

#include <stdio.h>

struct person
{
	char *name;
	int age;
	char *work;
	void(*printinfo)(struct person*per);
};

void   printinfo(struct person*per)
{
	printf("name=%s,gae=%d,work=%s\n", per->name, per->age, per->work);
}


int  main(int argc, char **argv)
{
	struct person  persons[] =
	{
		{"zhangsan",10,"teacher",printinfo},
		{"lisi",15,"doctor",printinfo},
	};
	printf("采用结构体内指针函数的方式\n");
	persons[0].printinfo(&persons[0]);
	persons[1].printinfo(&persons[1]);
}

可以实现这样的功能,但是相当的恶心,麻烦,,但是不好意思,,这就是C语言啊!!!
对于完美注意者,这个是绝对的不可以忍受的。
可以将函数直接放在结构体中吗??
现在将 .c文件换成 .cpp文件。

#include <stdio.h>
struct person
{
	char *name;
	int age;
	char *work;
	void   printinfo(void)
	{
		printf("name=%s,gae=%d,work=%s\n", name,age, work);
	}
};

int  main(int argc, char **argv)
{
	struct person  persons[] =
	{
		{"zhangsan",10,"teacher"},
		{"lisi",15,"doctor"},
	};
	printf("采用结构体内指针函数的方式\n");
	persons[0].printinfo();
	persons[1].printinfo();
}

也同样的达到了目的,并且整个代码看上去更加的优雅!!我就在我的结构体中调用我的函数,这样子更加的优雅和舒适。

在C++中对 结构体 struct 做了这样的扩展,

  1. 可以在结构体中,直接使用函数。
  2. 可以在结构体的函数中,直接调用结构体中的成员。

/************************************************************************/

既然对结构体做了这样的扩展,那么 struct 为什么不定义为 一个新的类别呢???
class  油然而生!!
#include <stdio.h>
class  person
{
public:
	char *name;
	int age;
	char *work;
	
	void   printinfo(void)
	{
		printf("name=%s,gae=%d,work=%s\n", name, age, work);
	}
};

int  main(int argc, char **argv)
{
	struct person  persons[] =
	{
		{"zhangsan",10,"teacher"},
		{"lisi",15,"doctor"},
	};
	printf("采用结构体内指针函数的方式\n");
	persons[0].printinfo();
	persons[1].printinfo();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值