第9章 定义新类型

来源:互联网 发布:win10配置java环境变量 编辑:程序博客网 时间:2024/06/06 00:07

内置类型:C++语言核心内置了一些类型,对于这些类型的性质和特征都是在C++语言核心定义的,例如:int,double,float,char,bool等等。

 

自定义类型:C++语言提供给用户自己定义类型的能力,用户可以根据自己对事物的抽象编写相应的自定义类型。例如标准库的:std::string,std::ostream,std::vector等等都是C++标准库的自定义类型。

 

classstruct关键字的区别:在C++中,这两个关键字都是用来定义自定义类型的,作用几乎都是一样的,唯一的区别在于其默认的访问权限(下面会解释什么是访问权限)。Class默认的访问权限为private,而structpublic

 

自定义类型的访问权限:其实准确的说应该是自定义类型域中的名字的访问权限。一个自定义类型构成一个名字域,在这个名字域中所定义的名字都将依附其访问权限。C++提供三种访问权限:public,protected,private。其含义分别为:公共(任意访问),受保护(继承体系中可以访问,继承在以后的章节中再做讨论),私有(只能自己和友元访问,友元这里暂不解释)。

 

成员变量和成员函数:自定义类型对象属于聚合类型对象,其又各种不同的数据组合而成,这些数据通常被成为成员变量。注意:这里我提到的是对象,而不是类。我们可以为对象定义访问接口函数,通过这些函数来对对象的成员变量进行访问和操作,这样的函数就被成为成员函数。

 

构造函数:通过一个自定义类型创建一个这个类型的对象,首先被调用的就是构造函数。构造函数主要完成一些成员初始化工作,当我们没有为类型显示写出任何构造函数,C++会为我们自动生成一个默认构造函数(所谓默认构造函数就是不带参数的构造函数)。

 

构造函数初始化列表:在构造函数参数列表后,我们使用一个冒号(:)开始书写我们的构造函数初始化列表。这个初始化列表是使用一些值对我们的成员变量进行初始化,可以通过逗号(,)来区分每个变量。这些值可以是来自构造函数的参数,也可以是一些字面值,或者是表达式等。

 

class Window{

    int x_;

    int y_;

    int width_;

    int height_;

 

public:

    Window(int x, int y, int w, int h)

       : x_(x)

       , y_(y)

       , width_(w)

       , height_(h)

    {

    }

 

    void Move(int offsetX, int offsetY);

    void Show();

 

};

这里定义了一个自定义类型,名字为Window。自然就形成了一个Window名字域,在其名字后紧跟的{}对中定义的名字都属于Window名字域。我们使用的是class关键字,所以其默认访问权限为private。所以我们的四个int类型的成员变量都只能由Window类对象自身进行访问。我们编写了一个四个参数的构造函数,那么编译器就不会为我们自动生成默认构造函数了。在构造函数初始化列表当中,我们使用构造函数的四个参数对我们的四个成员变量进行初始化。我们还为我们的Window类型对象声明了两个接口函数(成员函数):MoveShow。这两个函数的函数体在这里没有给出,因为其取决于一些实现细节,和我们这里所要讲的概念无关,其功能就是移动窗口和显示窗口。

 

我们如何来使用自定义类型呢:

Window wnd(100, 100, 600, 400);

wnd.Show();

wnd.Move(10, 20);

wnd.Show();

这几行代码中,我们构造了一个Window类型对象wnd,通过参数传递让这个窗口的坐标为(100100),大小为(600*400)。然后我们让这个窗口显示,之后我们使窗口在X轴上移动了10, 在Y轴上移动了20,并再次显示了窗口。

这就是我们使用自定义类型的方法。

 

注意:课堂中我会给大家讲解更多的关于类和对象的知识,这些知识点比较重要,所以可能会花1堂课以上进行讲解,希望我的课堂对大家有所帮助。

原创粉丝点击