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++函数模板与类模板的理解.具体内容如下: 泛型编程( ...
随机推荐
- Hangfire任务调度框架使用
1.HangFire简介 HangFire是一个免费简单实用的分布式后台定时调度服务,在现在.net开发中,人气算是很高的. HangFire提供了内置集成化的控制台,可以直观明了的查看作业调度情况, ...
- 『无为则无心』Python函数 — 32、递归
目录 1.什么叫递归函数 2.递归的应用场景 3.递归的特点 4.应用:3以内数字累加和 5.应用:阶乘 6.总结 1.什么叫递归函数 Python中,在函数内部,可以调用其他函数.如果一个函数在内部 ...
- DRF框架在嵌套关系下实现嵌套对象字段的过滤
当需要对关联对象的字段进行选择性显示时,在所对应的serializer类中声明引用的字段. 例如: class TrackSerializer(serializers.ModelSerializer) ...
- spring-aop(二)学习笔记
常用增强处理类型 增强处理类型 特点 before 前置增强处理,在目标方法前织入增强处理 ...
- PowerShell 之常用方法
随笔分类 - 常用 [PowerShell]文件的解压与压缩 摘要:1 New-Item -ItemType File 1.txt -Force #新建文本文件 2 Compress-Archive ...
- VMware桥接模式连接局域网和互联网
第一步:确认本地网关地址 第二步选择桥接模式: 我比较幸运,桥接到"自动",就已经连接成功.不用逐个试错. 修改 ifcfg-ens33 和 新建 ifcfg-br0 [root@ ...
- mysql之突破secure_file_priv写webshell
在某些情况下,当我们进入了一个网站的phpMyAdmin时,想通过select into outfile来写shell,但是通常都会报错. 这是因为在mysql 5.6.34版本以后 secure_f ...
- 一条 Git 命令减少了一般存储空间,我的服务器在偷着笑
元旦不是搭建了一个<Java 程序员进阶之路>的网站嘛,其中用到了 Git 来作为云服务器和 GitHub 远程仓库之间的同步工具. 作为开发者,相信大家都知道 Git 的重要性.Git ...
- 使用 SourceGenerator 简化 Options 绑定
目录 摘要 Options 绑定 使用 SourceGenerator 简化 如何 Debug SourceGenerator 如何 Format 生成的代码 使用方法 SourceCode & ...
- 《剑指offer》面试题68 - I. 二叉搜索树的最近公共祖先
问题描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p ...