C++之不带指针类的设计——Boolean

经典的类设计分类

  • 带指针类
  • 不带指针类

Header文件的布局

#ifndef __COMPLEX__
 #define __COMPLEX__
 #include <iostream.h>
 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&);
};

构造函数

构造函数是类中很是重要的函数,在类建立的时候由系统自动调用ios

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

操做符重载

操做符重载能够看作是特殊的函数,能够是成员函数,也能够是非成员函数若是是成员函数的话,默认第一个参数是this指针,通常不写设计


这种状况下就不能写成是成员函数了,由于和其它类型的对象相加指针



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


重点回顾:



  • 数据Data必定放在“class body”的pirvate中

  • 参数parameters尽量使用 pass by reference 方式传递

  • 返回值return value 尽可能用 pass by reference 来传递

  • class的body主体内不作变动的参数 或 返回值 应该 const 标识符,表示不但愿被修改

  • 构造函数中有一个 initialization list,要尽可能去使用。与在构造函数体内部进行参数初始化赋初值效率更高


返回值在什么状况下,不能使用pass by reference?对象


若是函数的返回值是在函数体内部临时建立用来存放结果值(是local的),那么在函数结束时这个临时对象的生命周期就结束了【虽然仍然能够吧reference传递出来可是是错误的】。这种状况则不能使用pass by reference。blog

相关文章
相关标签/搜索