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;
}
posted @ 2022-03-29 17:18  Stella77  阅读(35)  评论(0)    收藏  举报