美文网首页架构算法设计模式和编程理论程序员
C++如何设计一个类(不含指针的类)

C++如何设计一个类(不含指针的类)

作者: alex_zhou | 来源:发表于2017-01-15 14:45 被阅读0次

    经典的类设计分类

    • 带有指针
    • 不带指针

    Header文件的布局

    #ifndef __COMPLEX_H
    #define __COMPLEX_H
    #include <iostream>
    class complex; 前置声明
    class complex{ ...... };类声明
    complex::function()...... 类定义
    #endif

    类声明

    class complex  //class head
    {         //class body
    public:
      complex (double r = 0, double i = 0): re (r), im (i) { }
      complex& operator += (const complex&);
      double real () const { return re; }      //函数在body内定义,则自动成为inline候选人
      double imag () const { return im; }
    private:
      double re, im;
    
      friend complex& __doapl (complex *, const complex&);
    };
    

    构造函数

    构造函数是类中非常重要的函数,在类创建的时候由系统自动调用

    complex (double r = 0, double i = 0)//默认参数,在不传参的时候直接使用默认值
    : re (r), im (i)  //初始值列表,在创建成员的时候直接赋值,比在创建之后赋值效率高
     { }
    
    • 构造函数可重载
      重载的时候注意是否有默认参数
    • 构造函数可以是private
      private的时候不允许外部创建对象,这个是在singleton的时候经常用到。

    常量成员函数

    double real () const { return re; }
    在函数名后面加const修饰符,一般情况下加const表示这个函数不会修改内部的成员变量。能加的尽量加上const。

    const complex a(1,2);    //由于a是const的,而类的设计者在设计real()的时候没有const,调用会报错
    a.real();
    

    参数传递和返回值传递

    • 传值
    • 传引用
      值传递会发生拷贝,当传递比较大的数据时,拷贝是一件很费时间和效率的事情,所以在传值和引用之间首选传引用,但是需要考虑有些时候是不能传引用的,比如临时对象

    friend(友元)

    • 自由取得friend的private成员
    • 相同class的各个object互为友元

    操作符重载

    操作符重载可以看做是特殊的函数,可以是成员函数,也可以是非成员函数,如果是成员函数的话,默认第一个参数是this指针,一般不写。

    操作符重载
    • 这种情况下就不能写成是成员函数了,因为和其它类型的对象相加
    和其它类型对象相加

    这种情况下,返回的是临时对象,临时对象返回值绝对是不能用引用的

    相关文章

      网友评论

        本文标题:C++如何设计一个类(不含指针的类)

        本文链接:https://www.haomeiwen.com/subject/hvcybttx.html