C++網易雲課堂開發工程師--類模板

來源:互聯網
上載者:User

標籤:dir   out   end   bsp   網易   str   ons   實現   開啟   

static

complex

data members

static data members

member functions

static member functions

非靜態成員函數:non-static member functions

complex c1, c2, c3                                                                             complex c1, c2, c3

cout << c1.real();                           ------------------>                         cout << complex::real(&c1);                      -----------------------> non-static data members

cout << c2.real();                           ------------------>                         cout << complex::real(&c2);                      -----------------------> non-static data members

static data members  待用資料  “僅有一份”

static member functions   靜態函數  -------------->  沒有thispointer,所以靜態函數只能處理待用資料

進一步補充,static:

class Account{

  public:

    static double m_rate;

    static void set_rate(const double& x) {m_rate = x;} 靜態函數沒有thispointer所以只能調用待用資料

};

double Account::m_rate = 8.0;               待用資料必須在class外面進行定義(定義擷取記憶體)

int main(){

  Account::set_rate(5.0);                                                        調用static函數的方式有兩種:

  Account a;                     (1) 通過object調用,通過對象調用

  a.set_rate(7.0);                    (2) 通過class name調用,通過類名調用

}

 進一步補充,把ctors放在private中,把建構函式放在private中

class A{

  public:

    static A& getInstance(return a;)                                      getInstance(return a;)外界可以通過a來擷取對象

    setup()  {...}

  private:

    A();                                                                                      將A放在private裡面,那麼沒有任何人可以建立A

    A(const A& rhs);

    static A a;

}

 

A::getInstance().setup();   單例設計模式;  通過調用函數來實現,調用自己

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

上述表例中,若沒有自己則會造成浪費,例如static A a中, 若不需要建立則造成浪費。

class A{

  public:

    static A& getInstance();

    setup() {...}

  private:

    A();

    A(const A& rhs);

    ...

};

A& A::getInstance(){                A::getInstance().setup();

  static A a;

  return a;

}

進一步補充:class template, 類模板

template <typename T>

class complex{

  public:

    complex(T r = 0, T i = 0)  :  re(r),   im(i)  {  }

    complex& operator += (const complex&);

    T   real()   const   {return re;}

    T   imag()     const   {return im;}

  private:

    T re, im;

    friend complex& _doapl(complex*, const complex&);

};

{

  complex<double>  c1(2.5, 1.5);

  complex<int>  c2(2, 6);

}

進一步補充:function template, 函數模板

template <class T>

inline

const T& min(const T& a, const T& b){

  return b < a ? b : a;

}

類模板與函數模板的差別

1.

類模板在使用時,必須指定類型是什嗎?

函數模板不必明確指出,編譯器會進行參數推倒。

進一步補充:namespace

namespace std{           可以分為不同模組進行封裝 

  ...

}

 

using directive      

#include <iostream.h>

using namespace std;         全部開啟

int main(){

  cin << ...;

  cout << ...;

  return 0;

}

 

C++網易雲課堂開發工程師--類模板

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.