IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++面向对象高级开发(侯捷)——类模板,函数模板及其他 -> 正文阅读

[C++知识库]C++面向对象高级开发(侯捷)——类模板,函数模板及其他

static

static的成员不再单独属于一个对象,他是单独的保存在内存的某个地址,也就只有一份。所以在设计程序的时候要看这个东西是不是只需要一份。
static函数和一般的函数一样,在内存中只有一份。静态函数没有this指针,不能像一般成员一样去访问和存取一般的成员数据,他只能处理静态的对象,静态的成员。
如果class中有静态的数据,一定要在class之外进行初始化。

class Account{
public:
	static double m_rate;//只是声明而已
	static void set_rate(const double& x) { m_rate = x;}
}; 
double Account::m_rate = 8.0;//定义,设初值,使这个变量获得内存。
                            //静态数据必须在类的body之外写这条,给不给初值都可以。
int main(){
	Account::set_rate(5.0);//通过class name 调用
	Account a;           
	a.set_rate(7.0);  //通过object调用
}

静态成员函数的调用方法有两种:
1、通过对象来调用
2、通过class name调用
一般函数通过对象来调用函数,对象的地址会作为this指针传进函数,static函数就不会这样操作。
在这里插入图片描述
在这里插入图片描述

Singleton设计模式

诉求:设计的class,只希望产生一个对象
外界取得唯一的a,然后调用别的函数对a进行操作: A::getInstance.setup();

class A{
public:
	static A& getInstance { return a; }; //外界取得唯一的a,对外的唯一窗口
	setup() {...}
private:
	A();
	A(const A& rhs); //两个构造函数
	static A a;  //不想让别人创建a,所以把构造函数放入private
	...
};

问题:外界若不调用a,但a仍存在于内存中
优化措施:把静态的自己放入对外的唯一接口中(即getInstance函数中)
好处:只有当被调用时,a才会被创建,离开函数之后,a还在(因为是静态的)

class A{
public:
	static A& getInstance { return a; };
	setup() {...}
private:
	A();
	A(const A& rhs);
	...
};
A& A::getInstance()
{
	static A a;
	return a;
}

getInstance()仍然是对外的唯一窗口
但唯一的对象放在getInstance里,写出这样那么如果没有人使用那么a就不存在。只有当人调用getInstance(),a才会被创建。

cout源码剖析

在这里插入图片描述

模板

class template 类模板

复数的实部虚部可能是double,int等等,这部分用T表现

template<typename T>// 目前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* , complex&); 
}
{
   complex<double> c1(2.5,1.5); //将class中的所有T用double代替
   complex<int>(2,1); //将class中的所有T用int代替

typename可以用T来替代
类模板必须要明确指出替代的typename是什么
如上图所示调用,c1传入的类型会把T全部替换为double,c2传入的类型会把T全部替换成int

function template 函数模板

例:取最小值函数,可以应用于很多个类中
在这里插入图片描述
class类型也可以用T来代替
函数模板不必明确指出class类型是什么,编译器会做实参推导
因为比大小都使用(<)符号,设计比大小的方法不在<身上,而是在参与比大小的对象的class里

命名空间namespace

在这里插入图片描述
namespace 后可以命名一个名称将所有东西都放到名称里,这样就讲有所得东西都包装到命名空间里。
using directive等于将std全部打开,把所有东西都取出来
using declaration相当于从std中拿一个东西

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 11:45:37  更:2021-08-13 11:46:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 5:42:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码