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++类模板与其他的更多相关文章

  1. C++STL - 类模板

    类的成员变量,成员函数,成员类型,以及基类中如果包含参数化的类型,那么该类就是一个类模板   1.定义 template<typename 类型形参1, typename 类型形参2,...&g ...

  2. C++ 类模板的使用

    从事C++挺久了,在前段时看书时,发现高手,都是在写模板无,泛型编程,顿感差距.自己连模板都没有写,于是就小小的研究了下模板的用法. 模板简而言之就是对某此对象的相同方法,或处理方式,进行归纳,总结, ...

  3. Xcode6中如何使用自定义的类模板

    说到IOS类的模板,有些人感觉很陌生,但是只要有开发过IOS程序的人,其实都用过类的模板,只不过是用的系统自带的类的模板. 例如创建一个ClassTemplateVC继承于UIViewControll ...

  4. VS2013,VS2015设置类模板文件表头

    一般VS的类模板文件是放在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSha ...

  5. 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板

    [源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...

  6. 类模板的static成员

    下列代码可以通过编译吗?如何修改使其通过编译? template <class T> struct sum {   static void foo(T op1 , T op2){    c ...

  7. 4.1 pair类模板

    在学习关联容器之前,首先先要了解一下STL中的pair类模板,因为关联容器的一些成员函数返回值都是pair对象,而且map 和multimap中的元素都是pair对象. 1)pair类模板定义 pai ...

  8. 3.2 STL中的函数对象类模板

    *: STL中有一些函数对象类模板,如下所示: 1)例如要求两个double类型的x 和y 的积,可以: multiplies<double>()(x,y); 该表达式的值就是x*y的值. ...

  9. C++类模板

    在上篇文章(C++函数模板)中,主要介绍了C++中函数模板,与函数相似,类也可以被一种或多种类型参数化.容器类就是一个具有这种特性的典型的例子, 本文地址:http://www.cnblogs.com ...

  10. [Reprint] C++函数模板与类模板实例解析

    这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下   本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...

随机推荐

  1. Centos下查看cpu核数

    1.概念物理CPU:实际Server中插槽上的CPU个数.物理cpu数量:可以数不重复的 physical id 有几个. 2.逻辑CPULinux用户对 /proc/cpuinfo 这个文件肯定不陌 ...

  2. 设置Linux的一些文本输出方式

    更新一下yum咯 yum install -y epel-release 火车 sudo yum install sl $ sl 放火 sudo yum install libaa-bin 小老鼠 s ...

  3. C# 使用vs2017 创建类 时 注意点

    1.创建新类后,在其他类无法new 这个新创建的类 ,怎么回事? 原因很简单,创建类时不带修饰符,默认是被保护的类 上图为创建类后的默认代码 ,没有修饰符 ,在其他类中无法引入改类的命名空间,会显示找 ...

  4. spring的返回json数据给前端注意事项

    1. 记得加入SpringJSON解析包,否则spring无法将返回的pojo类解析成json数据 maven则加上下面的依赖包 <!-- SpringJSON解析包--> <jac ...

  5. VMware 创建的虚拟机,Xshell无法进行连接

    使用场景: 在VMware 创建了Centos7后,Xshell一直连接不上,如果排查以下问题还是不行.就可以用这种方法了 1.配置了静态地址 2.VMware配置了NAT映射,划分了网段后 3.检查 ...

  6. Linux上天之路(十三)之系统进程管理

    主要内容 进程介绍 进程管理 进程优先级 1. 进程介绍 Linux系统中的几乎任何行动都会以进程的形式进行.如果你用网络浏览器查看网页,浏览器就作为进程运行.如果键入bash shell的命令行,这 ...

  7. GoLang设计模式19 - 桥接模式

    桥接模式是一种结构型设计模式,通过桥接模式可以将抽象部分和它的实现部分分离.这看着有点儿奇怪,接下来会作详细说明. 桥接模式建议将一个较大的类拆分成两中角色. 抽象角色 - 抽象角色是一个接口.它的子 ...

  8. MicroPython 8266 配置

    MicroPython 8266 配置 刷固件 下载固件 MicroPython - Python for microcontrollers 从以上网址下载固件,本文下载的是esp8266-20210 ...

  9. [.Net]使用ABP 数据库迁移migration遇到的坑及解决方案

    ​ 问题:在使用Update-Database时,突然出现"数据库中已存在名为 'XXX' 的对象". 检查发现__EFMigrationsHistory表中的MigrationI ...

  10. 学习javaScript必知必会(4)~事件、事件绑定、取消事件冒泡、事件对象

    1.常用的事件: ① onload:页面加载 ② onblur: 失去焦点 onfocus: 获取焦点 ③ onclick:点击 ④ onmouseover:鼠标经过 onmouseout:鼠标离开 ...