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. mysql百万级分页优化

    普通分页 数据分页在网页中十分多见,分页一般都是limit start,offset,然后根据页码page计算start , 这种分页在几十万的时候分页效率就会比较低了,MySQL需要从头开始一直往后 ...

  2. Quartz

    Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...

  3. CYQ.Data V5 从入门到放弃ORM系列:教程 - AppConfig、AppDebug类的使用

    1:AppConfig类的介绍: Public Static (Shared) Properties IsEnumToInt 是否使用表字段枚举转Int方式(默认为false). 设置为true时,可 ...

  4. Web应用多账号系统设计及微信扫码登录实现

    Web应用多账号系统设计及微信扫码登录实现 1   前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...

  5. ABP框架 - 数据传输对象

    文档目录 本节内容: DTO 必要性 领域层的抽象 数据隐藏 序列化和延迟加载问题 DTO 约定和验证 示例 DTO和实体间自动映射 使用特性和扩展方法进行映射 辅助接口和类 Data Transfe ...

  6. TODO:这是一个我的自媒体

    TODO:这是一个我的自媒体 自媒体(外文名:We Media)又称"公民媒体"或"个人媒体",是指私人化.平民化.普泛化.自主化的传播者,以现代化.电子化的手 ...

  7. Java基础之IO流

    很长时间都没有更新了,最近在补充JavaSE的一些细节部分 关于IO流的一些总结 首先要介绍的是File类,File类用于对文件和目录的一些操作 1.创建文件CreateNewFile() 2.对文件 ...

  8. xcode低版本调试高版本真机系统

    低版本xcode调试本真机高版本系统 //打开此路径把最新的文件拷贝到这里就可以了 /Applications/Xcode.app/Contents/Developer/Platforms/iPhon ...

  9. 【Win 10 应用开发】Web授权示例:获取新浪微博的授权码

    在使用类似微博的开放API的时候,会涉及到授权的问题,就拿微博来说,当用户在你的应用中需要调用微博API来处理一些事情时,你首先要让用户登录微博,得到用户授权后,才能调用微博API. 授权通常通过一个 ...

  10. OpenCASCADE Data Exchange - 3D PDF

    OpenCASCADE Data Exchange - 3D PDF eryar@163.com Abstract. Today most 3D engineering model data are ...