C++中的类和对象的特性

 C++的灵魂就在于他的“类和对象”,在经过一段时间的学习,我简单总结一下我对于C++中的类和对象的一些总结。

一、对于类和对象的概述

1、类和对象是什么?

什么是‘类’和‘对象’?C++中的对象的类型称为类(class),类是对象的抽象,对象式类的具体实例。下面以一段代码为例。

1 class Time
2 {
3     int hour;
4     int minter;
    int sec;
5 };
6
7 Time time1,time2;

上面便是一个简单的类,其中“类名”为Time,它的对象有两个“time1”以及“time2”。这样和C语言中的结构体十分相似,“类与对象”的关系也和“结构体类型与结构体变量”是一样的。

总结下来类和对象的关系就是——类是对象的模板,是定义对象的一种抽象类型

2、类和对象的作用

“类”是C++对于C语言最为重要的改进,是实现面向对象程序设计的基础。使用“类”将与此类相关的对象放在一起,形成一个整体,与外界分隔。这样有三个好处:

一、便于合作,避免出现由于多人合作而产生的定义上的问题,可以避免误调用;

二、这样模块化的设计,可以降低编程难度,使得思路清晰,到时候组装起来即可;

三、类的可继承性,这样是可以减少许多工作量。关于类的继承性我们这里暂且不提。

二、类和对象的定义及使用

1、类的公有和私有

C语言是面向过程的程序设计,这样就出现了一个问题,那就是“数据缺乏保护”。面向过程设计中的数据是公用的、共享的,可以被不同的函数所调用,故而这些数据是缺乏保护的,而数据的交叉使用极为容易导致错误的产生。而C++中“类”,则是具有划分公有部分和私有部分的功能,函数的调用只能调用公有部分,而私有部分“只供类内部使用”。C++私有部分声明函数为“private”,公有部分声明为“public”。

 1 class Time
 2 {
 3 private:
 4     int hour;
 5     int minter;
 6     int sec;
 7 public:
 8      void display()
 9     {
10         cout << hour << ":" << minter << ":" << sec << endl;
11     }
12 };

以上述代码为例,其中的hour、minter、sec这三个为私有部分,只能在类的内部调用,在类外无法引用;而函数display则是公有部分,可以在类外引用。

2、类与结构体的异同

再次说明一下,C++是C语言的超集,C语言中功能在C++中基本是可以使用的,结构体在C++中不但可以使用,并且C++还将其的功能给予了扩展,甚至于在C++中允许使用struct来声明一个类。也就是说,将class改为struct后,类其实仍然可以使用。

而struct创建的类,与class创建的类,二者的区别在于——在没有设立private(私有部分)以及public(公有部分)时,struct所创建的类系统会将其成员默认为public;而class所创建的类,系统会将其成员默认为private。

 

3、对象成员的引用

所谓的对象成员,便是对象所属类中的成员。其访问方式有三种:1、通过对象名和成员运算符访问;2、通过指针访问;3、通过对象的引用进行访问。

(一)通过对象名和成员运算符访问

这种访问方式的一般情况为“对象名.成员名”,

class Time
{
public:
    int hour;
    int minter;
    int sec;
    void display()
    {
        cout << hour << ":" << minter << ":" << sec << endl;
    }
};

int main()
{
    Time time1;
    time1.hour = 11;    //这里便是成员函数的引用,模式为“对象名.成员名”
}

(二)通过指针访问

class Time
{
public:
    int hour;
    int minter;
};

Time t, *p;    //定义对象t和指针变量p
p = &t;      //使p指向对象t
cout << p->hour;  //输出p指向的对象中的成员hour

(三)通过对象的引用进行访问

定义一个对象的引用来对此对象进行访问,这个方法说的简单点就是给这个对象取一个新名字,本质不变,对象与对象的引用会占用同一个存储单元。

例如:

Time t1;            //定义Time类对象t1;
Time &t2 = t1;        //定义Time类引用t2,并使之初始化,初始化的值与t1相同;
cout << t2.hour;        //输出对象t1中的成员hour

而此时的t2.hour其实也就是t1.hour

三、类和对象中的成员函数

上面简单的说过了对象的成员,而对象的成员函数其实也就是在类中的函数。其用法与C语言中的外部调用基本上是一样的。而成员函数非常重要的一点就是他是可以直接调用类中的函数的私有部分以及公有部分。

类的成员函数,一般有两种引用方法:1、内置成员函数;2、类外定义成员函数;

但是实际上二者并没有什么不同。

class Time
{
private:
    int hour;
    int minter;
    int sec;
public:
    void display()
    {
        cout << hour << ":" << minter << ":" << sec << endl;
    }
};

这便是内置成员函数,函数display()在Time类的内部。

class Time
{
private:
    int hour;
    int minter;
    int sec;
public:
    void display();
};

void Time::display()
{
    cout << hour << ":" << minter << ":" << sec << endl;
}

这便是类外定义成员函数,用了Time::display则是说明这个display是Time类中的函数;如果没有"Time::",则说明引用的display()是一个全局变量display()而非Time类中的display().

ps:新手上路,若有什么不对、不足之处,还望各位给予指正,非常感谢。