对于C++默认构造函数,我曾经有两点误解:类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数。合成默认构造函数会初始化类中所有的数据成员。 第一个误解来自于我学习C++的第一本书 《C++ Primer》,在书中392页:“只有当一个类没有定义构造函数时,编译...
分类:
编程语言 时间:
2015-07-25 21:24:28
阅读次数:
226
C++ Primer 学习笔记_16_类与数据抽象(2)_隐含的this指针
1、引言
在前面提到过,成员函数具有一个附加的隐含形参,即指向该类对象的一个指针。这个隐含形参命名为this.
2、返回*this
成员函数有一个隐含的附加形参,即指向该对象的指针,这个隐含的形参叫做this指针(编译器自动传递)使用this指针保证了每个对象可以拥有不同数值的数据成员,但处理这些...
分类:
编程语言 时间:
2015-07-25 20:05:05
阅读次数:
141
C++ Primer 学习笔记_17_类与数据抽象(3)_类作用域
引言:
每个类都定义了自己的新作用域与唯一的类型。即使两个类具有完全相同的成员列表,它们也是不同的类型。每个类的成员不同与任何其他类(或任何其他作用域)的成员。
一、类作用域中的名字查找
1)首先,在使用该名字的块中查找名字的声明。只考虑在该项使用之前声明的名字。
2)如果在1)中找不到,则在包...
分类:
编程语言 时间:
2015-07-25 20:03:02
阅读次数:
177
C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明
在C++中,用类来定义自己的抽象数据类型。通过定义类型来对应所要解决的问题中的各种概念,可以使我们更容易编写、调试和修改程序。可以使得自己定义的数据类型用起来与内置类型一样容易和直观。
看一下Sales_item类:
class Sales_item
{
private:
std::string isbn;...
分类:
编程语言 时间:
2015-07-24 20:51:20
阅读次数:
221
C++ Primer 学习笔记_14_标准模板库_bitset位集合容器
bitset容器是一个bit位元素的序列容器,每个元素只占一个bit位,取值为0或1,因而很节省内存空间。下图是一个bitset的存储示意图,它的10个元素只使用了两个字节的空间。
使用bitset需要声明头文件”#include ”
1、创建bitset对象
创建bitset对象时,必须要指定容...
分类:
编程语言 时间:
2015-07-23 23:45:30
阅读次数:
206
C++ Primer 学习笔记_13_标准模板库_list双向链表容器
list容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线性表,这样,对链表的任一位置的元素进行插入、删除和查找都是超快速的。下图是双向循环链表的结构示意图。
list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。前驱元素指针域保存了前驱元素的首地址;数据域则是本节...
分类:
编程语言 时间:
2015-07-23 00:47:33
阅读次数:
197
迭代器的介绍概述迭代器是一种检查容器内元素并遍历元素的数据类型。迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或所有元素,每一个迭代器对象代表容器中的确定的地址。迭代器改动了常规指针的接口。所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都能够叫做迭代器。然而迭代器...
分类:
编程语言 时间:
2015-07-22 20:53:50
阅读次数:
206
引用本身不是一个对象,因此不能定义引用的指针;而指针是一个对象,因此可以定义指针的引用。 此外,要理解一个复合类型的变量到底是什么类型,最简单的办法是从右向左阅读其定义,离变量名最近的符号对变量的类型有最直接的影响。 具体参考C++ primer Page 52
分类:
其他好文 时间:
2015-07-22 18:17:49
阅读次数:
86
重载运算符和转换--转换与类类型【上】引言: 在前面我们提到过:能够用一个实參调用的非explicit构造函数定义一个隐式转换。当提供了实參类型的对象须要一个类类型的对象时。编译器将使用该转换。于是:这样的构造函数定义了到类类型的转换。 除了定义到类类型的转换之外,还能够定义从类类型到其它类型的.....
分类:
编程语言 时间:
2015-07-22 12:27:15
阅读次数:
126