C++面向对象(三)补充 static, cout, template
2021/4/28 20:25:23
本文主要是介绍C++面向对象(三)补充 static, cout, template,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++面向对象(三)补充 static, cout, template
- 一、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
由此可知,因为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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升