C语言是面向过程的,而C++是面向对象的。
一、问题
写一个程序,输出张三、李四的两个人的姓名、年龄
二、答案
1.最丑陋的写法
#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);
return 0;
}
2.如果输入成千上万个人,怎么做?
#include <stdio.h>
int main(int argc, char **argv)
{
char *names[] = {"zhangsan", "lisi"};
char ages[] = {10, 16};
char *work[] = {"teacher", "doctor"};
int i;
for (i = 0; i < 2; i++)
{
printf("name = %s, age = %d\n", names[i], ages[i]);
}
return 0;
}
如果属性name.age.work一直增加,这种方法也是不好的
3.引入结构体
#include <stdio.h>
struct person{
char* name;
int age;
char* work;
}; //注意分号
int main(int argc, char **argv)
{
struct person persons[] = {
{"zhangsan", 10, "teacher"},
{"lisi", 16, "doctor"},
}; //注意分号
int i;
for (i = 0; i < 2; i++)
{
printf("name = %s, age = %d, work= %s\n", persons[i].name, persons[i].age, persons[i].work);
}
return 0;
}
//注意分号
4.结构体里面加入函数指针
#include <stdio.h>
struct person {
char *name;
int age;
char *work;
void (*printInfo)(struct person *per); //函数指针
};
void printInfo(struct person *per) //实现函数,非函数指针
{
printf("name = %s, age = %d, work = %s\n", per->name, per->age, per->work);
}
int main(int argc, char **argv)
{
struct person persons[] = {
{"zhangsan", 10, "teacher", printInfo}, //要加入函数printInfo
{"lisi", 16, "doctor", printInfo},
};
persons[0].printInfo(&persons[0]);
persons[1].printInfo(&persons[1]);
return 0;
}
5.C++ 对C语言结构体的扩展:
a.可以直接写出函数
b.函数可以直接访问结构体中的属性
#include <stdio.h>
struct person {
char *name;
int age;
char *work;
void printInfo(void)
{
printf("name = %s, age = %d, work = %s\n", name, age, work);
}
};
int main(int argc, char **argv)
{
struct person persons[] = {
{"zhangsan", 10, "teacher"},
{"lisi", 16, "doctor"},
};
persons[0].printInfo();
persons[1].printInfo();
return 0;
}
6.C++ class的本质就是结构体,是对struct的一个扩展
#include <stdio.h>
class Person { //类首字母大写
public:
char *name;
int age;
char *work;
void printInfo(void)
{
printf("name = %s, age = %d, work = %s\n", name, age, work);
}
};
int main(int argc, char **argv)
{
Person persons[] = {
{"zhangsan", 10, "teacher"},
{"lisi", 16, "doctor"},
};
persons[0].printInfo();
persons[1].printInfo();
return 0;
}