`
dato0123
  • 浏览: 913696 次
文章分类
社区版块
存档分类
最新评论

《C++标准程序库》读书笔记(一)

 
阅读更多

1,很多编译器都要求模板的定义和实现都在头文件中,这是因为必须先为他提供某个实现品,然后才能调用,也只有如此才能通过编译。目前唯一能让“template的运用具有可移植性的方式,就是在头文件中以inline function实现temlate function

2下面typename指出SubTypeT中定义的一个型别,若不用这个关键字,则编译器会认为是两个数相乘,而不是定义的指针。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->classclassA
{
public:
typedef
intSubType;
};
template
<typenameT>
classMyClass
{
typenameT::SubType
*ptr;
};
intmain()
{
MyClass
<classA>c1;
return0;
}

3,类成员函数可以是模板函数,但这样的成员模板函数不能是虚拟的,也不能有缺省参数。下面这个例子中assign函数中,由于参数x*this类型不同,不能直接存取private成员,而必须通过公有方法getValue访问。模板构造函数用于在复制对象时实现隐式类型转换,但它并不会屏蔽隐式拷贝构造函数,只要类型完全吻合,隐式拷贝构造函数就会被产生出来并被调用。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->template<typenameT>
classMyClass
{
private:
Tvalue;
public:
MyClass()
{
value
=T();
}
MyClass(Tval)
{
value
=val;
}
template
<typenameX>
MyClass(
constMyClass<X>&x)
{
assign(x);
}
template
<typenameX>
assign(
constMyClass<X>&x)
{
value
=x.getValue();
}
TgetValue()
{
returnvalue;
}
};

intmain()
{
MyClass
<int>c1(10);
MyClass
<int>c2(c1);//callsbuilt-incopyctor
MyClass<double>c3(c1);//templatector
cout<<c2.getValue()<<endl;
return0;
}

(为什么这段代码在vc6下编译通过,但在vs2005下无法编译通过?

4, dynamic_cast将多态类型向下转换为其实际静态类型,若转换失败则会丢出一个bad_cast异常。const_cast设定或去除类型的常熟性,也可以用来去除volatile,这些操作法只接受一个参数。

5,从标准异常类别中派生新类别

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->classMyException:publicexception
{
public:
MyException(
char*msg):exception(msg)
{
}
virtualconstchar*what()constthrow()
{
returnexception::what();
}
};

voidfun()
{
throwMyException("erroroccour");
}
intmain()
{
try
{
fun();
}
catch(constMyException&exp)
{
cout
<<"justatest"<<endl;
}

return0;
}

6auto_ptr不允许使用一般指针惯用的赋值初始化方式,必须使用数值来完成初始化:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->auto_ptr<classA>ptr(newclassA);
auto_ptr
<classA>ptr2;
ptr2
=auto_ptr<classA>(newclassA);

分享到:
评论

相关推荐

    C++Primer读书笔记:C++概述.pdf

    C++Primer中文第三版(C++从入门到精通)第一章的读书笔记,主要是C++程序、预处理器指示符、iostream库等的基础知识点读书笔记。

    Visual C++ 程序设计学习笔记1~12章源代码

    本源代码既有多线程的使用,VC的各种控件的使用,以及动态连接库,ActiveX控件,网络编程,数据库编程,以及最后的一个整体大程序,KTV点歌系统等等

    BOOST程序库完全开发指南:深入C++“准”标准库(第3版).罗剑锋(带详细书签)

    Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉。 Boost由C++标准委员会部分成员所设立的Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串...

    Visual+C++程序设计学习笔记

    动态连接库的使用和创建方法,ActiveX控件的创建和使用,网络编程的基本知识和基本步骤,数据库开发的常用基本技术等等,而且最后还安排了一章大型案例系统来整体介绍Visual C++的应用,使读者能够学以致用,加深对 ...

    4737 C++程序设计 自考串讲笔记.doc

    它是一种将程序库名称封装起来的方法,它提高了程序的性能和可靠性。 4.动态内存分配的一般格式为: 指针名 = new 结构名; delete 指针名; 5.引用的声明格式为: 数据类型 & 别名 = 对象名; 6.引用通常用于函数的...

    C++及数据结构复习笔记

    该复习文档是本人根据谭浩强老师的《C++程序设计》、邓俊辉的《数据结构(C++语言版)》和CSDN博客上的众多文章总结而成的。感谢博客上各位大佬的总结,使我在复习课本的同时补充了很多其他方面的关键知识,如C++...

    PHP调用C++程序的完整笔记

    NULL 博文链接:https://hyjiang1989.iteye.com/blog/1821527

    Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用

    Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用 本文件中只有程序,不含笔记和注释,笔记和注释请到空间察看http://giddyandyang.spaces.live.com/

    Windows编程 C++ DLL编程 学习笔记 (二)动态链接库的创建 动态调用 静态调用

    Windows编程 C++ DLL编程 学习笔记 (二)动态链接库的创建 动态调用 静态调用 本文件中只有程序,不含笔记和注释,笔记和注释请到空间察看http://giddyandyang.spaces.live.com/

    基于Android自带的Binder库,用C++来实现Binder应用程序的Demo.pdf

    学习韦东山老师的4412开发板视频,做了点笔记,发出来跟大家分享一下这个学习的过程,如发现说的有误的地方,还请指出,谢谢!

    【C++】华丽的万花筒十六边形的绘制

    【Visual C++】游戏开发笔记之【浅墨DirectX提高班】系列博文 配套详细注释源码之五 源码配套博文 《【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己:索引缓存的故事 》 ,文章地址...

    【C++】DirectInput演示程序demo by浅墨

    【Visual C++】游戏开发笔记之【浅墨DirectX提高班】系列博文 配套详细注释源码之十 源码配套博文 《【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器:DirectInput专场》 ,文章地址为...

    基于C++ QT实现的笔记本项目源码,支持富文本笔记 支持最近文档,收藏夹,回收站,文件分类等 支持全局笔记搜索

    qss 样式表,本程序所有窗体、控件的样式都由qss设计 signal\slot 控件、窗体间通信,事件处理 QThread 异步处理 iconfont 阿里巴巴矢量图标库,主要用于按钮及标签上图标等显示 sqlite 存储数据库

    【C++】3D镜面特效程序源码 by浅墨

    源码的配套博文是 《【Visual C++】游戏开发笔记四十六 浅墨DirectX教程十四 模板测试与镜面特效专场》 ,文章地址为http://blog.csdn.net/zhmxy555/article/details/8632184, 点击Release下的exe文件可以直接...

    【C++】3D场景漫游程序源码 by浅墨

    源码的配套博文是 《【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现》 ,文章地址为http://blog.csdn.net/zhmxy555/article/details/8657656, 点击Debug下的exe文件可以...

    【C++】3D场景漫游2.0版程序源码 by浅墨

    源码的配套博文是 《【Visual C++】游戏开发笔记四十八 浅墨DirectX教程十六 三维地形系统的实现》 ,文章地址为http://blog.csdn.net/zhmxy555/article/details/8685546, 点击Release文件夹下的exe文件可以直接...

    linux项目工程资料-个人学习笔记 , 涵盖C , C++, Linux驱动, Linux内核, 嵌入式.zip

    该项目以Linux内核为核心,围绕其构建了一个完整的操作系统,包括各种系统工具、库、应用程序和硬件支持。 以下是Linux项目的一些主要特点和资料介绍: 开放源代码:Linux项目的所有源代码都是公开的,并允许任何...

    c#学习笔记.txt

    很多人觉得它应该像C或者C++,但事实上它更像是java的一个clone,所以作为入门,读一下清华大学出版社出版的《Java 语言与面向对象程序设计》可能会对你有所帮助。本文假定你具备一切学习此语言所需的知识,没有也不...

    开源免费 Markdown 笔记工具 VNote 3.0.1 中文多语免费版.zip

    VNote 是一个受 Vim 启发的开源笔记记录实用程序,还具有 Markdown 编辑功能。当然,您可以像具有便笺管理功能的可高度配置的 Markdown 编辑器一样轻松地查看它,它不会让人失望。 开源免费 Markdown 笔记工具 ...

    python核心笔记.pdf

    对于 Python,想必很多朋友还未曾听说,其定义我已在本笔记的第一章给出,这 里我想谈谈我对 Python 的个人理解。在我学习 Python 的过程中,有朋友问我,Python 到底是什么,它主要应用于什么方面,能做什么东西,...

Global site tag (gtag.js) - Google Analytics