C++面向对象基础(4)-补充
static
1、data members
非静态数据:属于对象,有几个对象就有几份数据;
静态数据:不属于对象,只有一份,单独在内存空间里;
2、member functions
非静态函数:有this指针
静态函数:没有this指针,只能处理静态数据
用static实现单例模式:
class A {
public:
static A& getInstance ();
setup () {...} // 调用的时候 A::getInstance().setup();
private:
A ();
A (const A& rhs);
...
};
A& A::getInstance()
{
static A a; //只有当调用的时候才会创建,并且只有一份
return a;
}
模板
1、class template:参数的类型未定,先用T代替。用复数举例如下:
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);
}
2、function template 函数模板
比如设计一个取min值的函数
template <class T>
inline
const T& min(const T& a, const T& b)
{
return b < a ? b : a;
}
任何类都可以比大小,但是规则是<定义的,需要在类里实现操作符重载
namespace
namespace std //std标准库
{
...
}
作用:将所有要用到的名字都封装在一个命名空间里,以防重名冲突。namespace可以存在于不同的地方,进行拼接。
使用:
1、using directive:(全部打开,后面直接使用)
#include <iostream.h>
using namespace std;
int main ()
{
cin << ...;
cout << ...;
return 0;
}
2、using declaration:(一个一个打开,打开的可以直接使用)
#include <iostream.h>
using std::cout;
int main ()
{
std::cin << ...;
cout << ...;
return 0;
}
3、使用全名(namespace::xxx)
#include <iostream.h>
int main ()
{
std::cin << ...;
std::cout << ...;
return 0;
}
浙公网安备 33010602011771号