標籤: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++網易雲課堂開發工程師--類模板