类的详细介绍

      这个概念,学过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 }

不一定要写全所有关键字,函数成员大多数都是放在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 };

直接定义对象,在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 }

那么,怎么调用函数呢?

               在继承类里面,调用基类的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 }
时间: 2024-08-07 03:44:02

类的详细介绍的相关文章

android Application类的详细介绍

在代码中经常看到application这个类,一直不知道这个是干什么用的,今天刚好有点时间,所以进行了详细的学习. 一.先对它的整体概念解释: 在android源码中对他的描述是; * Base class for those who need to maintain global application state. You can        * provide your own implementation by specifying its name in your        *

android Application类的详细介绍(转)

在代码中经常看到application这个类,一直不知道这个是干什么用的,今天刚好有点时间,所以进行了详细的学习. 一.先对它的整体概念解释: 在android源码中对他的描述是; * Base class for those who need to maintain global application state. You can        * provide your own implementation by specifying its name in your        *

UML类图详细介绍

类图主要描述程序对象以及他们之间的关系.一般来说,类.接口.抽象类这些程序对象的区别很容易,但是他们之间六种关系以前总是理解不够深刻,这次进行了一次复习,顺便写成博文以便加深理解 类图中的三种对象 类/抽象类 类的表示一般一般如下图所示 类名:图正中间的黑体字表示类的名称,如果是名字的字体是斜体字,则表明该类是抽象类 属性:类名下面的区域表示类的属性 操作:属性下面的区域表示类的操作(或者说方法). 可见性:属性和操作前面的+.-.#符号代表了这些对象的可见性分别是public.private.

C++类的详细介绍

#include "iostream" using namespace std; //class 关键字 //Circle 是类的名字 class Circle { int m_age;//什么都不加 默认为private; private: //private 修饰的成员变量和成员函数,只能在类的内部使用: double xiaosi; //私有成员属性,在类的外部不能被访问: public: //public修饰的成员变量,和成员函数,能在内部,和外部使用 double m_r;

Hibernate核心类和接口详细介绍

一.hiobernate核心类和接口预览图 二.hibernate.properties 这个文件是以前老版本使用的 类似于hibernate.cfg.xml文件:作用和hibernate.cfg.xml一致. 三.hibernate.cfg.xml (1)详细介绍 ①该文件主要用于指定各个参数,是hibernate核心文件 ②默认放在src目录下,也可以放在别的目录下. ③指定连接数据库的驱动.用户名.密码.url.连接池.. ④指定对象关系映射文件的位置. ⑤也可使用hibernate.pr

View类和surfaceView详细介绍

View类和surfaceView详细介绍: view类: view类是Android的一个超类,这个类几乎包含了所有的屏幕类型,每一个view都有一个用于绘画 的画布,这个画布可以进行任意的扩展.布局视图可以通过Android的XML来进行.在游戏开发中当然也可以自定义视图(view),让这个画布的功能更能满足我们在游戏开发是的需要,在Android中,任何一个view类只需要重写onDraw方法来实现界面显示,自定义视图可以是复杂的3D实现,也可以是简单地文本形式等. 游戏中最重要的就是与玩

几类常见的试验箱详细介绍!

为了方便检验商品的质量和特点,是必须检测其在不一样自然环境下的主要表现,为了方便对产品品质开展操纵,各式各样的试验箱请变成许多制造业企业不可或缺的关键机器设备. 试验箱的类型有许多,下边欧可仪器设备将几类常见的试验箱开展详细介绍: 高温试验箱: 高温试验箱关键是适用工业品高溫.超低温的可靠性测试,可以依照国家行业标准或顾客规定,仿真模拟各种各样的超低温或高溫自然环境,用以检测商品的工艺性能和高溫.超低温自然环境下其各类性能参数,来分辨商品的特性是不是可以合乎预订规定,便于对设计产品.改善.评定及

详细介绍spring框架(下篇)

上篇简单介绍了spring,下面详细介绍为什么需要spring框架? Spring带给我们什么 方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合.有了Spring,用户不必再为单实例模式类.属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用. AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付. 声明式事务的支持 在

[转]详细介绍java中的数据结构

详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各种数据结构,但是我还是要说一说java版数据结构与算法,希望对你有帮助. 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类. C