Essential C++ 学习笔记:第四章 基于对象的编程风格

目录

    • 4.1如何实现一个class
    • 4.2什么是构造函数和析构函数


4.1如何实现一个class

  以stack为例,stack作为一个类有他的member,其中member分为public和private,public可以在任意函数中访问使用,private只能在它的member中访问使用。所有涉及的member function都必须在class主体内进行声明,定义则自由选择。在主体定义的函数会自动视为inline函数,在主体之外定义的函数,需要加入作用域。
stack在书中的这一章节定义了6个操作函数:
push(),pop(),peek(),empty(),full(),size()
  具体代码后续贴出:

4.2什么是构造函数和析构函数

  我自己觉得在在4.1中对类的概念解释的并不明白清楚。以时间为例,时间是一个客观存在的东西,但在人类还未意识到时间时,它是没有意义的。在清楚明白时间的概念以后,为了可以直观的看到时间,记录时间,使用时间,就出现了日晷。时间就如同一个类,单单意识到它的存在是不够用的,要想使用他,我们还需实体化时间,也就是创建一个钟表。这个钟表就是clock类的实体,里面有小时,分钟,查询,计时等等功能。这样,class的概念就落地了。
  当然,我们之前也说过,所有的东西都不是凭空出现,臆想得来的。想在程序中用这个类要先创造出这个类的实体,类的构造函数(Constructors)就可以做这个工作。Constructor可以在class被定义的时候就调用,他可以初始化一些class中的member。作为一个函数,自然他也是可以override的。有了constructor自然也会有destructor。Destructor是用来释放class在使用期间占用的内存,但有些member,比如以储值形式存在的变量,在class object结束工作时就会释放,所以destructor没什么好做的,但是我的建议是最好对每个类都加上destructor,以保证内存的安全性。

class Triangular {
    public:
        //...
        Triangular();
    private:
        int length; //元素个数
        int begPos; //起始位置
        int next; //下一个迭代目标
}

//关于constructor,最简单的方式是不提供任何参数,所有的members都在构造函数中赋值:
Triangular::Triangular()
{
    length = 1;
    begPos = 1;
    next = 0;
}

//第二种更常见,直接在声明时为每个参数提供默认值
class Triangular{
    public:
        Triangular(int len = 1, int bP = 1);
    private:
        //...
}

Triangular::Triangular(int len, int bP)
{
    length = len > 0 ? len : 1;
    //...
}

//当然还有一种成员初始化列表
Triangular::Triangular(int len, int bP): next(3)
{
    //...
}

//在涉及到析构函数对内存进行操作时,需要构建一个成员逐一初始化的构造函数
//那个过于复杂,暂时不进行解释

你可能感兴趣的:(Essential C++ 学习笔记:第四章 基于对象的编程风格)