zoukankan      html  css  js  c++  java
  • 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&);
    };
    

    构造函数

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

    
    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指针,一般不写

    ![](http://images2015.cnblogs.com/blog/19200/201702/19200-20170209222425166-1415087702.png)

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

    ![](http://images2015.cnblogs.com/blog/19200/201702/19200-20170209222435807-1040259625.png)

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

    重点回顾:

    • 数据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。

  • 相关阅读:
    函数
    拉取代码到本地
    逻辑位运算符 以及 布尔运算符&&、||
    JS中substr与substring的区别
    ? :和!:的用法含义及es6语法...
    JS中attribute和property的区别
    并发、并行的理解
    斑鸠云商小程序记住账号和密码
    js中的foreach用法
    指针与数组
  • 原文地址:https://www.cnblogs.com/bobbychencj/p/6384474.html
Copyright © 2011-2022 走看看