C++01.类的引入

2018-06-17 23:29:09来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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

eg:

 1 #include <stdio.h>
 2 
 3 int main(int argc,char **argv)
 4 {
 5     char *zs_name="zhansan";
 6     int zs_age=10;
 7 
 8     char *ls_name="lisi";
 9     int ls_age=19;
10 
11     printf("name=%s,age=%d\n",zs_name,zs_age);
12     printf("name=%s,age=%d\n",ls_name,ls_age);
13     
14     return 0;
15 }

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

eg:

 1 #include <stdio.h>
 2 
 3 int main(int argc,char **argv)
 4 {
 5     char *names[]={"zhangsan","lisi"};
 6     char ages[]={10,19};
 7 
 8     int i;
 9 
10     //用for来循环输出
11     for(i=0;i<2;i++){
12         printf("name=%s,age=%d\n",names[i],ages[i]);
13     }
14 
15     
16     return 0;
17 }

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

eg:

 1 #include <stdio.h>
 2 
 3 struct person{
 4         char *name;
 5         int age;
 6         char *work;
 7     };
 8 
 9 int main(int argc,char **argv)
10 {
11     struct person persons[]={
12         {"zhangsan",10,"teacher"},
13         {"lisi",19,"doctor"},
14     };
15 
16     int i;
17 
18     //用for来循环输出
19     for(i=0;i<2;i++){
20         printf("name=%s,age=%d,work=%s\n",persons[i].name,persons[i].age,persons[i].work);
21     };
22 
23     
24     return 0;
25 }

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

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

 1 #include <stdio.h>
 2 
 3 struct person{
 4         char *name;
 5         int age;
 6         char *work;
 7 
 8         void (*printfInfo)(struct person *per);
 9     };
10 
11 void printfInfo(struct person *per)
12 {
13         printf("name=%s,age=%d,work=%s\n",per->name,per->age,per->work);
14 }
15 
16 int main(int argc,char **argv)
17 {
18     struct person persons[]={
19         {"zhangsan",10,"teacher",printfInfo},
20         {"lisi",19,"doctor",printfInfo},
21     };
22 
23     persons[0].printfInfo(&persons[0]);
24     persons[1].printfInfo(&persons[1]);
25     
26     return 0;
27 }

 

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[]={
        {"zhangsan",10,"teacher"},
        {"lisi",19,"doctor"},
    };

    persons[0].printfInfo();
    persons[1].printfInfo();
    
    return 0;
}

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

eg:

 1 #include <stdio.h>
 2 
 3 class person{
 4 public:            //必须定义权限为public,不然编译会出错。
 5         char *name;
 6         int age;
 7         char *work;
 8 
 9         void printfInfo(void)
10         {
11             printf("name=%s,age=%d,work=%s\n",name,age,work);
12         }
13     };
14 int main(int argc,char **argv)
15 {
16     struct person persons[]={
17         {"zhangsan",10,"teacher"},
18         {"lisi",19,"doctor"},
19     };
20 
21     persons[0].printfInfo();
22     persons[1].printfInfo();
23     
24     return 0;
25 }

  

 

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

(1)封装

(2)继承

(3)多态

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:bzoj1901 [ Zju2112 ] --树状数组套主席树

下一篇:bzoj1146整体二分+树链剖分+树状数组