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. 小程序用户反馈 - HotApp小程序统计仿微信聊天用户反馈组件,开源

    用户反馈是小程序开发必要的一个功能,但是和自己核心业务没关系,主要是产品运营方便收集用户的对产品的反馈.HotApp推出了用户反馈的组件,方便大家直接集成使用 源码下载地址: https://gith ...

  2. 编译器开发系列--Ocelot语言5.表达式的有效性检查

    本篇将对"1=3""&5"这样无法求值的不正确的表达式进行检查. 将检查如下这些问题.●为无法赋值的表达式赋值(例:1 = 2 + 2)●使用非法的函数 ...

  3. CodingLife主题更新

    收到反馈说CodingLife主题某些地方显示有问题,于是进行了更新,并且已提交.官方那边正在进行测试,我自己这边测完应该是没问题的,但不知道官方啥时候会进行更新,所以把CSS代码贴出来,有需要的可以 ...

  4. 在Ubuntu13.04中配置Jexus+Mono3.2运行Asp.Net Mvc 4站点 (一)

    这篇文章打算分两部分来写,第一部分介绍在Ubuntu中安装和配置.Net Framework4.5环境,第二部分介绍如何部署Asp.Net Mvc 4站点并确保Mvc4的几个重要特性都能正常工作. 一 ...

  5. AutoMapper(六)

    返回总目录 List和数组 AutoMapper只要求元素类型的配置而不要求可能会用到的任何数组或者list类型.比如,我们有一个简单的源和目标类型: public class Source{ pub ...

  6. Floyd-Warshall 全源最短路径算法

    Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Probl ...

  7. X Window 的奥秘

    大名鼎鼎的 X Window 大家肯定不陌生.都知道它是 Unix/Linux 下面的窗口系统,也都知道它基于 Server/Clinet 架构.在网上随便搜一搜,也可以找到不少 X Window 的 ...

  8. 跨越语言的障碍:C++/CLI 调用 C#

    首先我想投诉一下博客园首页右边栏的广告..最近总是出现很恐怖的整容脸的广告.真的是吓坏了.=.=大家有同感吗? 博客园前一阵子掀起了语言的广泛讨论,事实上语言的争执在整个程序员圈子也没有停止过.以我个 ...

  9. [异常解决] How to build a gcc toolchain for nRF51 on linux (very detailed!!!)

    1.Install gcc-arm-none-eabi https://devzone.nordicsemi.com/tutorials/7/This link shows that developm ...

  10. Java发展历史

    1991年1月 Sun公司成立了Green项目小组,专攻智能家电的嵌入式控制系统 1991年2月 放弃C++,开发新语言,命名为"Oak" 1991年6月 JamesGosling ...