嵌入式linux基础:c++(一)类的引入

简介: 嵌入式linux基础:c++(一)类的引入

1.类的引入


C语言是面向过程的 出一道题:

写一个程序,输出张三,李四两个人的姓名,年龄。

#inlude <stdio.h>
int main(int argc,char **argv)//多维数组的地址,行转化列
{
  char *zs_name = "zhangsan";
  int zs_age =10; 
  char *ls_name = "lisi";
  int ls_age =10; 
  printf("name = %s,age = %d\n",zs_name,zs_age);
  printf("name = %s,age = %d\n",ls_name,ls_age);
  return 0;
}


改进一下: 写一个程序,输出成百上千人的姓名,年龄。

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


再改进,利用指针,结构体。

#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},
  {"lisi", 16, "doctor",printInfo},
  };
  persons[0].printInfo(&persons[0]);
  persons[1].printInfo(&persons[1]);
  return 0;
}


能不能再改进?

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


这样就相对优雅一点,再C++中对struct做了两个扩展:

第一,可以直接在结构体中写出函数。

第二,这个函数可以直接访问结构体里面的这些属性。


所以就借此把struct定义为一个新的类别:class。

#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)
{
  struct person persons[] = {
  {"zhangsan", 10, "teacher"},
  {"lisi", 16, "doctor"},
  };
  persons[0].printInfo();
  persons[1].printInfo();
  return 0;
}


下面会围绕面向对象编程:

1.封装

2.继承

3.多态

相关文章
|
1天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
14 0
|
1天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
10 0
|
4天前
|
存储 安全 C语言
【C++】string类
【C++】string类
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
6天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”
|
6天前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
6天前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
|
7天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
7天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
8天前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植