学习笔记—面向对象高级篇上(GeekBand)

来源:互联网 发布:windows蓝牙抓包工具 编辑:程序博客网 时间:2024/05/16 09:14
  1. OOP(ObjectOriented Programming)面向对象编程。
  2. 头文件中要添加防卫式声明,防止头文件重复include。
    <span style="color:#ff0000;"><strong>#ifndef MY_COMPLEX__#define MY_COMPLEX__······#endif</strong></span>

  3. 构造函数对数据成员初始化应使用以下方式,而不要在赋值阶段赋初值:
    CMyComplex::CMyComplex(double rel, double img)<strong><span style="color:#ff0000;">:m_dbRel(rel), m_dbImg(img)</span></strong>
  4. 构造函数可以写在public和private中,当写在private中时,表示不允许外界创建对象。“单体”就是这样的类,它把构造函数写private中,表示只向外界提供一份该类的对象。
    class CTempComplex{public:static CTempComplex& GetObject(void);int GetData(void) const{ return m_data; };<strong><span style="color:#ff0000;">private:</span></strong>int m_data;<span style="color:#ff0000;"><strong>CTempComplex(void);</strong></span>}static CTempComplex& CTempComplex::GetObject(void){static CTempComplex col;return col;};int main(void){CTempComplex::GetObject().GetData();}

  5. 成员函数不改变该类中的数据成员时,则应在参数后加上const,若成员函数要改变该类的数据成员,则不可以加const。
    double GetReal(void) <strong><span style="color:#ff0000;">const</span></strong>;

  6. 当传递参数时,尽可能的传递指针或者引用,当不需要修改指针所指向的内容或引用时,应在类型前加const。表示常量不可修改,提高了程序的健壮性。
    double GetFriendData(<strong><span style="color:#ff0000;">const </span></strong>CMyComplex &src) const;

  7. 函数的返回值在可以的情况下,应该以引用方式来返回。如果返回的变量是局部变量,则不能返回引用,因为函数结束时,该局部变量的生命周期已结束。
    inline <strong><span style="color:#ff0000;">double </span></strong>CMyComplex::GetFriendData(const CMyComplex &src) const{return src.m_dbImg + src.m_dbRel;}

  8. 同一个类中的对象互为友元。
  9. 任何一个成员函数都有一个隐藏的(this)指针,谁调用这个成员函数,this就指向谁,且this不能写在函数参数表中。
    inline CMyComplex& CMyComplex::operator += (const CMyComplex& src){return Dopls(<strong><span style="color:#ff0000;">this</span></strong>, src);}

  10. 当重载一个操作符时,可以定义成全局函数,也可以定义成成员函数。当定义成成员函数时,参数列表中只需要右操作数,而左操作数已隐藏在this指针中。
    inline CMyComplex& CMyComplex::operator += (<strong><span style="color:#ff0000;">const </span></strong>CMyComplex& src){return Dopls(<span style="color:#ff0000;"><strong>this</strong></span>, src);}

  11. 以引用传递参数或者以引用作为返回值的好处是,传递者无需知道接收者是否以引用方式接收,这也方便函数的调用。
  12. 临时对象(typename)的创建,语法是:类名直接加()。临时对象在执行到下一行后生命期结束。
    <strong><span style="color:#ff0000;">CMyComplex (1, 5);//typename(临时对象)</span></strong>

  13. 类中对友元函数的声明,表示可以通过该友元函数调用该private成员,破坏了类的封装性。友元函数的声明可以放在public或private中,但友元函数不是类的成员函数。
    class CMyComplex{public:CMyComplex(double rel = 0, double img = 0);~CMyComplex(void);double GetReal(void) const;double GetImag(void) const;private:double m_dbRel, m_dbImg;<span style="color:#ff0000;"><strong>friend CMyComplex& Dopls(CMyComplex *pdest, const CMyComplex &src);</strong></span>};

  14. 总结一个类写得正规几点:
    •  头文件中是否对类进行防卫式声明。
    •  数据是否在private中。
    • 构造函数使用初始化列表对数据成员进行初始化。
    • 函数的参数以引用或指针的方式传递,当参数不需要做任何改变时,应该加const。
    • 函数返回值可以以引用方式返回的,就使用引用的方式返回。

0 0
原创粉丝点击