1.假设我们要输出张三,李四两个人的基本信息,包括姓名,年龄,可以用以下的C程序实现:

eg:

 #include <stdio.h>

 int main(int argc,char **argv)
 {
     char *zs_name="zhansan";
     ;

     char *ls_name="lisi";
     ;

     printf("name=%s,age=%d\n",zs_name,zs_age);
     printf("name=%s,age=%d\n",ls_name,ls_age);

     ;
 }

2.假设要输出很多人的信息,那么用上面这样的程序思路实现起来很不方便,可以用数组来实现:

eg:

 #include <stdio.h>

 int main(int argc,char **argv)
 {
     char *names[]={"zhangsan","lisi"};
     ,};

     int i;

     //用for来循环输出
     ;i<;i++){
         printf("name=%s,age=%d\n",names[i],ages[i]);
     }

     ;
 }

3.假设基本信息的属性有很多个,还有工作,婚姻状况等等的属性,按上面的程序思想,我们就得增加很多用于保存属性的数组,这显然也不是很方便,可以继续改进程序,引入结构体:

eg:

 #include <stdio.h>

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

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

     int i;

     //用for来循环输出
     ;i<;i++){
         printf("name=%s,age=%d,work=%s\n",persons[i].name,persons[i].age,persons[i].work);
     };

     ;
 }

4.上面的函数只是在结构体内定义了属性,我们可以继续改进,定义一些相关的函数:

eg:注意在C语言里面,只能写函数指针。

 #include <stdio.h>

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

         void (*printfInfo)(struct person *per);
     };

 void printfInfo(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[]={
         {,"teacher",printfInfo},
         {,"doctor",printfInfo},
     };

     persons[].printfInfo(&persons[]);
     persons[].printfInfo(&persons[]);

     ;
 }

5.用更简洁的方式写上面的程序,直接在结构体内写函数,注意以下程序文件的后缀是“.cpp”而不是“.c”不然会出现错误。

eg:

#include <stdio.h>

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

        void printfInfo(void)
        {
            printf("name=%s,age=%d,work=%s\n",name,age,work);
        }
    };
int main(int argc,char **argv)
{
    struct person persons[]={
        {,"teacher"},
        {,"doctor"},
    };

    persons[].printfInfo();
    persons[].printfInfo();

    ;
}

6.C++对struct做了扩展,可以直接在strucr内直接定义函数,函数可以直接访问struct里面的属性。可以把这个结构体重新定义为一个新的类别:

eg:

 #include <stdio.h>

 class person{
 public:            //必须定义权限为public,不然编译会出错。
         char *name;
         int age;
         char *work;

         void printfInfo(void)
         {
             printf("name=%s,age=%d,work=%s\n",name,age,work);
         }
     };
 int main(int argc,char **argv)
 {
     struct person persons[]={
         {,"teacher"},
         {,"doctor"},
     };

     persons[].printfInfo();
     persons[].printfInfo();

     ;
 }

  

面向对象程序编程的特点:

(1)封装

(2)继承

(3)多态

C++01.类的引入的更多相关文章

  1. ThinkPHP讲解(十)——第三方类的引入:以分页为主

    第三方类的引入,以分页类为例: 1.在控制器里新建一个分页的操作方法FenYe() 注意:第三方类Page.class.php放在Think或Home文件夹下,并新近一个文件夹,放在里面,并在其类里加 ...

  2. C++第一篇--类的引入

    C++第一篇--类的引入 1. 用C语言输出两个人的信息 Person1.c:通过字符实现 #include <stdio.h> int main(int argc,int **argv) ...

  3. day23 01 类的命名空间

    day23  01 类的命名空间 一.初识面向对象复习 定义类: class 函数:方法 动态属性 变量:类属性 静态属性 过程: (1)_init_方法:初始化:def _init_(self,参数 ...

  4. 001_linuxC++之_类的引入

    (一) C++类的引入,图片的程序比较好看,文中程序不贴出来 (二) 知识点 1. 成员函数的存取权限:公有的(public),保护的(protectd),私有的(private) 2. 第27行th ...

  5. php中class类文件引入方法汇总

    在项目中  总是会用到类文件引入的操作,在此简单总结下: 方法一: 使用  include,require,include_once,require_once. 其中:*_once  once意为曾经 ...

  6. Objective-C学习篇01—类的声明与实现

    Objective-C,是美国人布莱德·确斯(Brad Cox)于 1980 年年初发明的一 种程序设计语言,其与同时代的 C++ 一样,都是在 C 的基础上加入面向对象特性扩充而成的.Objecti ...

  7. MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射

    本系列将使用zTree来创建.编辑关于品牌.车系.车型的无限级分类,使用datagrid显示,源码在github.先上最终效果: datagrid显示所有记录.分页,提供添加.修改.删除按钮,并提供简 ...

  8. idea 创建多模块时模块类无法引入

    我的原因是类的位置方的不对,由于刚搭建的项目,本来只想做个测试,就直接在java下创建类,然而这居然是个深坑,模块引入了也无法引入这个模块的类. 解决方法:创建com.***.***包后的类可以正常引 ...

  9. 第2课第1节_Java面向对象编程_类的引入_P【学习笔记】

    摘要:韦东山android视频学习笔记 1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字.代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添 ...

随机推荐

  1. 跟着老男孩教育学Python开发【第三篇】:Python函数

    set 无序,不重复,可嵌套. 函数 创建函数: 1.def关键字,创建函数 2.函数名 3.() 4.函数体 5.返回值 发邮件函数 def sendmail():     import smtpl ...

  2. BZOJ 3626: [LNOI2014]LCA [树链剖分 离线|主席树]

    3626: [LNOI2014]LCA Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2050  Solved: 817[Submit][Status ...

  3. php杂记(二)

    1.获取客户端真实IP if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $onlineip = $_SERVER['HTTP_CLIENT_IP']; } else ...

  4. Spring7:基于注解的Spring MVC(下篇)

    Model 上一篇文章<Spring6:基于注解的Spring MVC(上篇)>,讲了Spring MVC环境搭建.@RequestMapping以及参数绑定,这是Spring MVC中最 ...

  5. Dubbo学习小记

    前言 周一入职的新公司,到了公司第一件事自然是要熟悉新公司使用的各种技术,搭建本地的环境. 熟悉新公司技术的过程中,首先就是Maven,这个前面已经写过文章了,然后就是Dubbo----公司的服务都是 ...

  6. Jquery双向select控件Bootstrap Dual Listbox

    效果预览: 一. 下载插件 github地址:https://github.com/istvan-ujjmeszaros/bootstrap-duallistbox 也可以在这个网站中下载:http: ...

  7. 自动添加Linux登录账户,并授予sudo权限

    #!/bin/bash USER=test PASS=$USER GROUP=root HOME=/data/home/$USER # if user not exist if [[ $(cat /e ...

  8. ABP框架 - 时间

    文档目录 本节内容: 简介 时钟 客户端 时区 客户端 绑定器与转换器 简介 虽然有些应用目标市场只是在一个时区,有些应用目标市场是许多不同时区,为满足这种需求并集中化日期操作,ABP为日期操作提供公 ...

  9. Protobuf使用规范分享

    一.Protobuf 的优点 Protobuf 有如 XML,不过它更小.更快.也更简单.它以高效的二进制方式存储,比 XML 小 3 到 10 倍,快 20 到 100 倍.你可以定义自己的数据结构 ...

  10. CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)

    ---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update....   yum install 或者 添加y ...