zoukankan      html  css  js  c++  java
  • 类的详细介绍

          这个概念,学过java的人们肯定不陌生。因为java本来就是用类的思想实现的。

              我在一开始学类和对象的时候,总是问别人:为什么要有类这个语法?

              而他们总是回答我: 因为类这个东西,是人们写着写着代码而逐渐产生的一种东西。我也不知道这样说对不对,反正他们说c++难就难在这块上面,就像继承与派生,都是人们通过生活演化而来的。

            1.类和对象的定义

                类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。

                对象是具有类类型的。

                类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类

    是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。

                  比方说,一类人,就可以定义为一个类(class Person),而人能干什么呢?

                  人能说话

                  人能睡觉

                  人能看书

                    ........

             

                  人有年龄

                  人有性别

                  人有名字

                    ........

                 这些,就是这个Person(人)类的成员,年龄,性别,名字要定义:

    1 char name[10]; //人的姓名
    2 int age;//人的年龄
    3 char sex;//人的性别
    class Person

                 以上元素成为这个Person类的成员变量。

                 而人的功能,需定义为:

    1 public://关键字
    2 
    3 void speak();//说话
    4 void sleep();//睡觉
    5 void read();//看书
    class Person

                 以上功能函数则称为Person类的成员函数。

                 例如,学校类可定义为:

     1 class School//
     2 {
     3 
     4     char classid[1000];//教室名称
     5     char schoolname[100];//学校名称
     6     int classnumber[1000];//教室号
     7     int years;//年龄
     8 
     9     pubilc://
    10           void getschoolname();//得到学校名称
    11           void Regsiter();//赋值函数
    12 
    13 };
    class School

                 虽然例子有点不贴切,或者对类与对象初学者有些困难,不必担心,类与对象其实不怎么困难,但我刚学

    时听mooc的时候肯定也像初学者现在的感觉,一个字:晕。但你一会就会明白为什么要有 那两个函数成员了。

                成员包括三类:

                               public:    //公用的数据和成员函数

                       

                               protected:   //保护的数据和成员函数

                               private:   //私有的数据或成员函数

                 定义形式:

     1 class 类名
     2 {
     3 
     4     public//公用的数据和成员函数和成员函数
     5 
     6     protected//保护的数据和成员函数
     7 
     8     private//私有的数据
     9 
    10 }
    View Code

                 不一定要写全所有关键字,函数成员大多数都是放在public关键字里面的。

                 成员变量定义时基本上不写关键字,系统会将其直接默认为私有成员:private,private代表私有成员,外界不能随便访问,如果外界想对私有

    成员变量进行访问,可以通过写一个Regsiter函数,来给私有变量赋值,再编一个public公有的操作函数,可以在另一个类或函数、main函数中通过:

                类名::函数名称(参数类型 参数//可以根据在类里函数的定义声明);

                这样调用。

               

                具体调用方法如下:

     1 #include<iostream> 
     2 using namespace std;
     3 class Person
     4 //定义一个Person类 
     5 {
     6     char name[20];
     7     //人的名字 
     8     int age;
     9     //人的年龄 
    10     char sex;
    11     //人的性别 
    12     public:
    13            //公有函数成员 
    14            void show()
    15            //输出 
    16            {
    17                cout<<name<<" "<<age<<" "<<sex;
    18            }
    19 };
    20 int main()
    21 {
    22     Person p; 
    23     p.show();
    24     //调用show函数输出信息 
    25 }
    class Person

               有时,因为迫不得已,需要设定 void getname()等函数

               

               类与结构体:

                   

                  C++增加了class类型后,仍保留了结构体类型(struct),而且把它的功能也扩展了。C++允许用struct来定义一个类型。如可以将前面用关键字class声明的类类型改为用关键字struct。

                 为了使结构体类型也具有封装的特征,C++不是简单地继承C的结构体,而是使它也具有类的特点,以便于用于面向对象程序设计。

                  用struct声明的结构体类型实际上也就是类。用struct声明的类,如果对其成员不作private或public的声明,系统将其默认为public。

                 

                  如果想分别指定私有成员和公用成员,则应用private或public作显式声明。

                 而用class定义的类,如果不作private或public声明,系统将其成员默认为private,在需要时也可以自己用显式声明改变。

               如果希望成员是公用的,使用struct比较方便,如果希望部分成员是私有的,宜用class。建议尽量使用class来建立类,写出完全体现C++风格的程序。

               struct 有些调用方法与class相同。

        类的成员函数

    性质:    类的成员函数(简称类函数)是函数的一种,它的用法和作用和第4章介绍过的函数基本上是一样的,它也有返回值和函数类型。

                  它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。

                  它可以被指定为private(私有的)、public (公用的)或protected(受保护的)。

                  在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。

                  例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用。

                  成员函数可以访问本类中任何成员(包括私有的和公用的),可以引用在本作用域中有效的数据。

                  一般的做法是将需要被外界调用的成员函数指定为public,它们是类的对外接口。

                  但应注意,并非要求把所有成员函数都指定为public。有的函数并不是准备为外界调用的,而是为本类中的成员函数所调用的,就应该将它们指定为private。

                 这种函数的作用是支持其它函数的操作,是类中其它成员的工具函数(utility function),类外用户不能调用这些私有的工具函数。

                 类的成员函数是类体中十分重要的部分。如果一个类中不包含成员函数,就等同于C语言中的结构体了,体现不出类在面向对象程序设计中的作用。

            详细定义代码:

     1 class Person
     2 //定义一个Person类 
     3 {
     4     char name[20];
     5     //人的名字 
     6     int age;
     7     //人的年龄 
     8     char sex;
     9     //人的性别 
    10     public:
    11            //公有函数成员 
    12            void show()
    13            //输出 
    14            {
    15                cout<<name<<" "<<age<<" "<<sex;
    16            }
    17            void Register(char* Name,int Age,char Sex)
    18            //赋值函数
    19            {
    20                 strcpy(name,Name);
    21                 age=Age;
    22                 sex=Sex; 
    23            }
    24 };
    View Code

            

            直接定义对象,在C++中是合法的、允许的,但却很少用,也不提倡用。

            在定义一个对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。

    函数的定义:

            需要定义一个函数时,可以在类内定义,也可以在类外定义。

             类外可以如下定义:

                      类名: Person

                      如果要定义函数:Regsiter的话,可以这样定义

                    

                      void  Person::Regsiter()

                      {

                            //函数体

                       }

            

              

     1 class Student
     2 
     3 { 
     4     public :
     5 
     6         void display( );
     7 
     8         //公用成员函数原型声明
     9 
    10     private :
    11     //此处不一定要写private
    12 
    13         int num;
    14 
    15         string name;
    16 
    17         char sex;
    18 
    19 //以上3行是私有数据成员
    20 
    21 };
    22 
    23 void Student∷display( )
    24 
    25 //在类外定义display类函数
    26 
    27 {
    28     cout<<″num:″<<num<<endl;
    29 
    30     //函数体
    31 
    32     cout<<″name:″<<name<<endl;
    33 
    34     cout<<″sex:″<<sex<<endl;
    35 
    36 }
    View Code

    那么,怎么调用函数呢?

                   在继承类里面,调用基类的public函数往往如下调用:

                    Person::Regsiter();

                    

                   而在int main()函数里面,则可以定义:

                    Person P;

                    p.Regsiter();

                

                    注意:以上只是普通public函数的调用方法,后面还有继承和派生、构造函数的调用方法。

    对象成员的引用

    1.通过对象名和成员运算符访问对象中的成员

        例如在程序中可以写出以下语句:

        stud1.num=1001;//假设num已定义为公用的整型数据成员

        表示将整数1001赋给对象stud1中的数据成员num。

        其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。

        注意不能只写成员名而忽略对象名。

        访问对象中成员的一般形式为: 对象名.成员名

        不仅可以在类外引用对象的公用数据成员,而且还可以调用对象的公用成员函数,但同样必须指出对象名,如

    stud1.display( );//正确,调用对象stud1的公用成员函数

    display( );//错误,没有指明是哪一个对象的display函数

        由于没有指明对象名,编译时把display作为普通函数处理。

        应该注意所访问的成员是公用的(public )还是私有的(private )。只能访问public成员,而不能访问private成员,如果已定义num为私有数据成员,下面的语句是错误的:

        stud1.num=10101;//num是私有数据成员,不能被外界引用

        在类外只能调用公用的成员函数。在一个类中应当至少有一个公用的成员函数,作为对外的接口,否则就无法对对象进行任何操作。

    简单程序举例:

           

    设计Person类
     

    题目内容:

    设计一个Person类,包含name、age、sex属性以及对这些属性操作的方法。实现并测试这个类。
    根据类的封装性要求,把name、age、sex声明为私有的数据成员。

    声明公有的成员函数Register()、ShowMe()来访问这些属性,在Register()函数中对数据成员进行初始化。

    person1通过cin来得到信息,person2通过Register("Zhang3", 19, 'm') 来得到信息。

    输入格式:

    person1的信息

    输出格式:

    person1和person2的信息

    输入样例:

    Li4 18 f

    输出样例:

    Li4 18 f

    Zhang3 19 m

    时间限制:500ms内存限制:32000kb
     
    代码:
     
     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 class Person
     5 {
     6     private://声明成员变量
     7          char Name[20];
     8          char Sex;
     9          int Age;
    10     public://声明成员函数
    11            void Register(char *name,int age,char sex);
    12            //赋值函数
    13            void ShowMe();
    14 };
    15 void Person::Register(char *name, int age, char sex)
    16 {
    17      //函数体
    18      strcpy(Name,name);
    19      Age=age;
    20      Sex=(sex=='m'?'m':'f');
    21 }
    22 void Person::ShowMe()
    23 {
    24      //输出函数,外界不能输出!
    25      cout<<Name<<" "<<Age<<" "<<Sex<<endl;
    26 }
    27 int age;
    28 char name[20],sex;
    29 int main()
    30 {
    31     Person person1,person2;//定义两个对象
    32     cin>>name>>age>>sex;
    33     person1.Register(name,age,sex);
    34     person1.ShowMe();
    35     person1.Register("Zhang3",19,'m');
    36     person1.ShowMe();
    37 }
  • 相关阅读:
    js数组
    关于编程,程序员的一些语录
    css心得
    js函数
    一些电脑基础知识
    gnome3安装
    C学习小记
    ubuntu重装系统后
    elinks文字浏览器
    快捷方式
  • 原文地址:https://www.cnblogs.com/wxjor/p/5536347.html
Copyright © 2011-2022 走看看