C++面向对象(三)补充 static, cout, template

C++面向对象(三)补充 static, cout, template

一、static

静态函数只能处理静态数据

调用static函数的方式有两种:
(1)、通过object调用
(2)、通过class name调用

class Account{
public:
	static double m_rate;
	static void ser_rate(const double& x){
		m_rate = x;
	}
};
double Account::m_rate = 8.0;  // 如果是static数据,必须再类外紧跟着做初始化!!

int main(){
	Acccount::set_rate(5.0); // 调用(1)
	Accout a;
	a.set_rate(7.0); // 调用(2)
}

在类对象的外面,记得必须要定义 "double Account::m_rate; ",至于要不要赋初始值均可,但一定要在类外定义。

  • 设计模式(一)
    所写的class,只希望产生一个对象,且不希望让外界来创建
class A{
public:
	static A& getInstance{
		return a;
	};
	setup(){
		...
	}
private:
	A();
	A(const A& rhs);
	static A a;
	...
};
A::getInstance().setup();

这样只能通过class内部创建出来对象a,而外界无法创建。但有个缺点,就是即使没有使用到a对象,class也会在一开始就创建a出来,在没有使用到的情况下容易造成内存浪费。所以可以考虑下面的设计模式。

  • 设计模式(二)
class A{
public:
	static A& getInstance{
		return a;
	};
	setup(){
		...
	}
private:
	A();
	A(const A& rhs);
	...
};

A& A::getInstance(){
	static A a;
	return a;
}
A::getInstance().setup();

这样便只有当有人调用到class A时才产生对象a,若没人使用到对象a,则不存在。且当其对象a一产生,便可延续使用,直到整个程序结束。

二、cout

C++面向对象(三)补充  static, cout, template由此可知,因为cout是个ostream类型,所以其可以接受很多类型的输出。

三、template

  • 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& __doaple(complex*, const complex&);
};

complex<double> c1(2.5, 1.5);
complex<int> c2(2, 6);
  • function template(函数模板)

    用的时候不需要指出来里面的类型是什么类型,编译器会对function template进行推导。

template <class T>

inline const T& min(const T& a, const T& b){
	return b < a ? b : a;
}
class stone{
public:
	stone(int w, int h, int we): _w(w), _h(h), _weight(we){}
	bool operator<(const stone& rhs) const{
		return _weight < _rhs.weight;
	}
private:
	int _w, _h, _weight;
};

stone r1(2, 3), r2(3, 3), r3;
r3 = min(r1, r2);
编译器先对function template进行参数推导,推导出T为stone类型,然后调用stone类型的重载函数进行判断比较。

C++面向对象(三)补充  static, cout, template

上一篇:android桌面悬浮窗实现


下一篇:Mysql登录出现Can‘t connect to MySQL server on localhost (10061)【解决】