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++STL - 类模板
类的成员变量,成员函数,成员类型,以及基类中如果包含参数化的类型,那么该类就是一个类模板 1.定义 template<typename 类型形参1, typename 类型形参2,...&g ...
- C++ 类模板的使用
从事C++挺久了,在前段时看书时,发现高手,都是在写模板无,泛型编程,顿感差距.自己连模板都没有写,于是就小小的研究了下模板的用法. 模板简而言之就是对某此对象的相同方法,或处理方式,进行归纳,总结, ...
- Xcode6中如何使用自定义的类模板
说到IOS类的模板,有些人感觉很陌生,但是只要有开发过IOS程序的人,其实都用过类的模板,只不过是用的系统自带的类的模板. 例如创建一个ClassTemplateVC继承于UIViewControll ...
- VS2013,VS2015设置类模板文件表头
一般VS的类模板文件是放在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSha ...
- 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板
[源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...
- 类模板的static成员
下列代码可以通过编译吗?如何修改使其通过编译? template <class T> struct sum { static void foo(T op1 , T op2){ c ...
- 4.1 pair类模板
在学习关联容器之前,首先先要了解一下STL中的pair类模板,因为关联容器的一些成员函数返回值都是pair对象,而且map 和multimap中的元素都是pair对象. 1)pair类模板定义 pai ...
- 3.2 STL中的函数对象类模板
*: STL中有一些函数对象类模板,如下所示: 1)例如要求两个double类型的x 和y 的积,可以: multiplies<double>()(x,y); 该表达式的值就是x*y的值. ...
- C++类模板
在上篇文章(C++函数模板)中,主要介绍了C++中函数模板,与函数相似,类也可以被一种或多种类型参数化.容器类就是一个具有这种特性的典型的例子, 本文地址:http://www.cnblogs.com ...
- [Reprint] C++函数模板与类模板实例解析
这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下 本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...
随机推荐
- MobaXterm远程连接Linux图形用户界面
目标: 在自己的Windows桌面打开运行在Linux上的firefox浏览器, 使用MobaXterm终端工具在命令行直接打开图像化界面. 工具: Windows: MobaXterm Linux: ...
- 双buffer实现无锁切换
大家好,我是雨乐! 在我们的工作中,多线程编程是一件太稀松平常的事.在多线程环境下操作一个变量或者一块缓存,如果不对其操作加以限制,轻则变量值或者缓存内容不符合预期,重则会产生异常,导致进程崩溃.为了 ...
- Python_关于python2的encode(编码)和decode(解码)的使用
在使用Python2时,我们习惯于在文件开头声明编码 # coding: utf-8 不然在文件中出现中文,运行时就会报错 SyntaxError: Non-ASCII character... 之类 ...
- 关于 this.$route.meta.operations.includes('delete') 取不到值的问题
原因是:src/mock/api/sys.login.js中定义的路径 要与src/router/modules/下定义的路由要一致 作用this.$route.matched可以查看匹配信息 来自为 ...
- Layui table 学习笔记
templet:'<div>{{createrFormat(d.accounts.name)}}</div>' function createrFormat(o){ retur ...
- 方法覆盖 和toString方法的作用
当我们代码怎么编写的时候,在代码级别上构成了方法的覆盖呢? 两个类必须要有继承关系. 重写之后的方法和之前的方法具有:相同的返回值类型 相同的方法名 相同的形参列表 访问权限不能更高,只能更低 重写之 ...
- Android官方文档翻译 九 2.2Adding Action Buttons
Adding Action Buttons 增加动作按钮 This lesson teaches you to 这节课教给你 Specify the Actions in XML 在XML中指定动作 ...
- 龙芯 3A4000 安装 Debian10 (via debootstrap)
由于一些原因,Debian 的内核不能直接在龙芯的 cpu 上使用.据悉 Linux 5.7 kernel 改进了对龙芯的支持,不久的将来我们应该就能更愉快地在龙芯上运行 Debian 了. 感谢龙芯 ...
- sql 语句实现实现特殊查询 总结
统计某一字段不为空 select count(*) from 表名 where 字段名 is not null 统计某一字段为空 select count(*) from 表名 where 字段名 i ...
- python中的rpc库
基于xml的rpc调用 rpcserver.py from xmlrpc.server import SimpleXMLRPCServer # python中类的命名方式遵循驼峰命名法 # 1. 没有 ...