
认清C++语言
ACE1985
这个作者很懒,什么都没留下…
展开
-
《认清C++语言》---也谈C++关键字explicit
c++中的explicit关键字用来并且只能用来修饰类的构造函数,表明该构造函数是显式的,“显式”的意思是说创建类对象时必须写出构造函数的名称,相对的,“隐式”指的是创建类对象时不必写出构造函数名,只需根据构造函数形参类型指定实参,由编译器进行形参类型到类类型的隐式转换。《C++ Primer》指出:可以用单个实参来调用的构造函数,它自身定义了从形参类型到类类型的一个隐式转换。也就是说,如原创 2010-04-14 13:45:00 · 1701 阅读 · 0 评论 -
《认清C++语言》のstd::stringstream和strstr
<br />1)std::stringstream的定义如下:<br />typedef basic_stringstream<char> stringstream;<br />它是basic_stringstream模板在char类型上的一个特化,使用该类型需要包含头文件<sstream>.<br /> <br />std::stringstream经常被用来将字符串和各种基本数据类型之间进行转换,功能类似于C标准库中的itoa和atoi函数,但std::stringstream能做的事情更多,我们就从下原创 2010-08-30 20:54:00 · 2623 阅读 · 0 评论 -
《认清C++语言》---继承而来的非虚函数和缺省参数
======================继承而来的非虚函数======================假设类Derive公有继承自类Base,且类Base定义了一个公有非虚成员函数func:class Base{public: void Func(); ...};class Derive : public Base{ ...}Derive de; //定义一个派生类对象Base *pb = &de; //得到一个指向de的Base指针pb原创 2010-06-25 10:00:00 · 1489 阅读 · 0 评论 -
《认清C++语言》---缺省构造函数
<br />构造函数能够初始化对象,而缺省构造函数(指没有参数的构造函数)则可以不利用任何在建立对象时的外部数据就能初始化对象。这带来正反两面的效果:正面效果是:一些行为特性与数字相仿的对象被初始化为空值或不确定值是合理的,还有例如链表、哈希表、图等数据结构也可以被初始化为空容器;反面效果是:对很多对象来说,不利用外部数据进行完全的初始化是不合理的,比如一个输入姓名的通讯录对象是没有意义的。<br />理想情况下,无需任何数据就可以建立对象的类可以包含缺省构造函数,而需要初始数据来建立对象的类则不能包含缺省原创 2010-06-23 22:35:00 · 1653 阅读 · 0 评论 -
《认清C++语言》之--内存管理
内存分配方式主要有三种:1)从静态存储区域分配;内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,例如全局变量、static变量;2)在栈上创建;执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限;3)从堆上分配,即动态内存分配。使用malloc或new申原创 2010-05-26 20:26:00 · 1797 阅读 · 0 评论 -
《认清C++语言》---理解临时对象
<br />对于临时变量经常会有一个误解,就是将仅仅需要一小段时间的变量称为临时变量:<br />template<typename T><br />void swap(T& obj1, T& obj2)<br />{<br /> T temp = obj1; //误解为temp是临时变量,其实正确地说temp是一个局部变量<br /> obj1 = obj2;<br /> obj2 = temp;<br />}<br /> <br />在C++中真正的临时变原创 2010-07-19 09:31:00 · 1729 阅读 · 0 评论 -
《认清C++语言》---类成员的指针
有时,我们希望获得类的特定成员的指针,然后从一个对象或别的对象获得该成员,这时可以通过使用称为成员指针的特殊种类的指针。成员指针包含类的类型以及成员的类型,成员指针只应用于类的非static成员。因为static类成员不是任何对象的组成部分,因此不需要特殊语法来指向static成员,static成员指针是普通指针。先看下面的类:class ASCEScreen{public: typedef std::string::size_type index; wchar_t get(原创 2010-07-13 22:49:00 · 1821 阅读 · 0 评论 -
认清C++语言之《模板特化specialization》
模板:1) 区分模板参数(template parameter)和模板实参(template argument),前者用于模板的声明,后者用于模板的特化中:templatetypename T> //T是一个模板参数class Heap {.....};//........Heapdouble> dHeap; //原创 2010-05-06 08:33:00 · 1827 阅读 · 0 评论 -
《认清C++语言》---引用和指针
1、 首先要认识到不存在类似于空引用(null reference)这样的东西。引用必须要指代某个对象,因此,如果有一个用于指代另外一个对象的变量,但是有可能没有这么一个可供指代的对象,这时就应该把这个变量声明成指针,因为这样就可以将它设为空值(null)了。反之,如果这个变量必须指代一个对象,即我们将这个变量设计成不允许为空值,那么这时基本上应该将这个变量声明成引用。2、 因为引用总是原创 2010-05-01 17:13:00 · 1767 阅读 · 0 评论 -
《认清C++语言》---堆对象
强制在堆中建立对象:有时候,我们要求某种类型的对象能够自我销毁,也就是能够“delelte this”,因此,我们需要将此类型的对象分配在堆上。由于非堆对象在定义它的地方被自动构造,在生存期结束时被自动释放,因此我们只要禁止使用隐式的构造函数和析构函数就可以限制对象在堆上分配内存。 最直接的方法是将构造函数和析构函数都声明为private,但这样副作用太大。因此,最好将析构函数置为pr原创 2010-05-03 19:35:00 · 1644 阅读 · 0 评论 -
《认清C++语言》---类型转换和多级指针
类型转换:1、 C风格的类型转换不尽如人意:1)很粗鲁,我们可以通过它们在任意类型之间进行转换;2)该类型转换很难进行查找。2、 C++通过引入4种新的类型转换操作符克服了C风格的类型转换的缺点:static_cast、const_cast、dynamic_cast、reinterpret_cast。有了这些操作符,以前习惯的写法:(type)expression;现在通常写原创 2010-05-01 17:18:00 · 1593 阅读 · 0 评论 -
《认清C++语言》---new and delete
1) new操作符(new operator)和operator new函数的区别: 下面的代码:string *ps = new string("Memory Management");使用的new是new操作符,这个操作符就像sizeof一样是内置于语言本身的。它所完成的功能分成两部分:首先分配足够的内存以便容纳所请求类型的对象(如上面的string对象);其次它会调用构造函原创 2010-05-04 08:25:00 · 1533 阅读 · 0 评论 -
《认清C++语言》---接口继承和实现继承
<br />作为类的设计者,有时希望派生类只继承成员函数的接口(声明);有时希望派生类同时继承函数的接口和实现,但允许派生类改写实现;有时则希望同时继承接口和实现,并且不允许派生类改写任何东西。<br />class ASCEShape<br />{<br />public:<br /> virtualvoid draw() const = 0; //纯虚函数,因此ASCEShape成为一个抽象类<br /> virtualvoid error(const strin原创 2010-06-24 22:52:00 · 1235 阅读 · 0 评论 -
《认清C++语言》---谈谈const
const类型修饰符可以:1) 用来说明符号常量和常数组(必须同时进行初始化,以后不能再更新)C++中,用关键字const修饰的标识符称为符号常量,或称为const变量。常量在使用前必须先定义同时初始化 ,例如:const double pi = 3.1415926或double const pi = 3.1415926; 通常情况下const同预处理器#de原创 2010-04-18 12:53:00 · 1690 阅读 · 1 评论 -
《认清C++语言》のrandom_shuffle()和transform()算法
<br />1)STL中的函数random_shuffle()用来对一个元素序列进行重新排序(随机的),函数原型如下:<br /> <br />template<class RandomAccessIterator><br /> void random_shuffle(<br /> RandomAccessIterator _First, //指向序列首元素的迭代器<br /> RandomAccessIterator _Last //指向序列最后一个元素的下一个位置的迭代器<br原创 2010-09-07 15:36:00 · 3282 阅读 · 0 评论