the c++ programming language
文章平均质量分 58
weishenmetlc
这个作者很懒,什么都没留下…
展开
-
第10章:expressions
const 和const expr:相比于c++的老标准,c++11新标准引入const expr这个类型,下面简要说一下,这两个不同的类型的相同点和不同点:1:用const 和const expr声明的变量它们的值一旦被定义后就不能被改变。如下面例子代码所示:const int x1=0; //okay;x1=1; //error, the value of variable x1 can't原创 2016-05-11 22:40:52 · 317 阅读 · 0 评论 -
第21章:class hierarchy
一:多重继承:1:在单个继承下,派生类的指针和引用可以自动转换为基类的指针和引用,对于多重继承也是如此,派生类的指针和引用可以转换为其任意基类的指针和引用。class A{/***/};class B{/***/};class C:public A,public B{/***/};void print(const A&);void highlight(B*);void f(const原创 2016-06-17 21:45:05 · 1615 阅读 · 0 评论 -
第20章:Derived Classes
20.4: Abstract Classes1: 先看如下代码例子:struct shape{ virtual void rotate(int)=0; virtual void draw() const=0; ~shape();};在上述代码中,shape中的成员函数rotate(int)和draw()被称作是纯虚函数。纯虚函数不仅有virtual声明,还有’=0’的伪原创 2016-06-10 20:42:16 · 305 阅读 · 0 评论 -
第20章:Derived Classes
20.1: introduction对于类继承来说,可以分为实现继承(implementation inheritance)和接口继承(interface inheritance)这两种(1)接口继承:派生类与基类具有相同的接口,在设计良好的类层次中,public派生类的对象可以用在任何需要基类对象的地方; (2)实现继承:基类为其派生类提供成员函数或数据成员以简化派生类的实现。20.2 Deri原创 2016-06-10 16:24:53 · 414 阅读 · 0 评论 -
第18章:operator overloading
一:字面值常量字面值常量是其值在编译时就已经被知道。 内置类型有字面值常量,比如1.2是double类型的字面值常量。那么用户自定义类型有没有字面值常量呢?答案是有,有两种方法可以使用户自定义类型具有字面值常量,下面介绍一种方法,另外一种方法会在第19章被介绍。 我们可以通过声明构造函数为constexpr函数来使该类具有字面值常量。例子代码如下:class ex{public:原创 2016-06-04 23:56:39 · 426 阅读 · 0 评论 -
第17章: construction,cleanup,copy and move
一:initializer_list的使用 我们能够通过initializer_list类提供的size(),begin(),end()函数来访问initializer_list类对象的成员。如下面例子代码所示:void f(initializer_list<int> arg){ for(int i=0;i!=arg.size();++i) cout<<args.begi原创 2016-06-02 22:29:42 · 338 阅读 · 0 评论 -
第19章:special operators
友元1:友元概念及用处 \quad友元机制允许一个类将对其非公有成员的访问权授予指定的函数和类。友元的声明以关键字friend开始,它只能出现在类定义的内部。因为友元不是授予友元关系的那个类的成员,因此它们不受声明出现部分的访问控制影响,因此友元声明可以出现在类中的任何地方。一般来说,我们通常将友元成组地放在类定义的开始或结尾处。2:友元声明: \quad友元可以是普通的非成员函数,或是一个其他原创 2016-06-07 19:38:05 · 281 阅读 · 0 评论 -
第16章:classes
一:类中可变数据成员(mutable data member): 在c++11新标准中新添加了可变数据成员(mutable data member)这个概念。 有时(但并不频繁)会发生这种情况,我们希望修改类的某一个数据成员,即使是在一个const成员函数内,可以通过在变量的声明中加入mutable关键字做到这一点,这个变量在该类中称为可变数据成员。如:class example原创 2016-06-02 21:12:00 · 283 阅读 · 0 评论 -
第15章:source files and programs
一:源文件要变成计算机可执行文件,需要经过编译和链接两个步骤。编译时,编译器一次只能处理一个源文件,当源文件经过编译变成目标文件后,链接器一次处理多个目标文件,对这些目标文件进行组织,使其变成计算机可执行文件。二:当链接器链接多个目标文件时,如果一个名字在一个目标文件中被定义,但是可以在其它目标文件中使用,那么就称其有外部链接(external linkage);如果这个名字只能被其定义所在的目标文原创 2016-06-01 21:24:54 · 281 阅读 · 0 评论 -
第14章:namespace
14.2.4节:这一节介绍了与命名空间相关的依赖参数的向上查找法则(Argument-Dependent Lookup):1:如果一个函数在它的源文件中没有发现被定义,那么编译器就会去查找该函数的参数所对应的命名空间,看该命名空间中是否定义了该函数。例如:namespace Chrono{ class Date{/*...*/}; bool operator==(const Date原创 2016-05-28 10:32:42 · 356 阅读 · 0 评论 -
第12章:functions
(1): 函数的声明:在c++11新标准中,有两种函数声明的方式,第一种是返回类型放在函数名字的前面;第二种是返回类型放在函数参数列表的后面。例如这下面两种声明方式是等价的:string to_string(int a); //c++老标准中的声明方式;auto to_string(int a)->string;//c++11中新添加的声明方式;对于第二种声明方式,放在函数名字前面的auto表明这原创 2016-05-15 20:34:22 · 295 阅读 · 0 评论 -
第11章: select operations
lambda表达式:1:相比于c++老标准,c++新标准增加了lambda表达式。它的存在主要是为了替代函数对象。可以看如下例子:比如说vector<string>中存储了一系列字符串,现在我要统计在这个vector中,长度分别大于等于0到10的字符串个数是多少个。在c++老标准中,我们需要先定义一个类,在这个类中重载调用操作符。代码如下://先定义类,在类中重载调用操作符;class GT_cls原创 2016-05-14 00:12:38 · 470 阅读 · 0 评论 -
第六章: types and declarations
一:c++变量基本类型c++变量类型可以分为内置类型(built-in types)和用户定义类型(user-defined type)两种。内置类型可以分为基本类型(如bool,int, char, double,void等)和用声明算符构造的类型(如int*, char[], double&, double&&)。用户定义类型指的是数据结构,类和枚举类型。下面主要给出基本类型一些介绍:基本类型:原创 2016-05-06 16:22:45 · 511 阅读 · 0 评论 -
第7章:pointers,arrays and references
1: 在c++中,我们能够通过对象名字访问一个对象。但与此同时,存储在内存中的对象在内存中有一个具体地址,因此我们也能够通过该具体地址访问该对象,指针存储着内存地址。2:在c++旧标准中,我们使用0或者是NULL来表示零指针,零指针表示该指针不指向任何对象。当我们使用0来表示零指针时,它很容易与整形的0混淆;NULL是个宏,一般来说在c++中NULL被如下定义:#define NULL 0,然后在原创 2016-05-09 10:41:03 · 600 阅读 · 0 评论 -
第8章:structures, unions, and enumerations
这一章主要讲了关于structures,unions,和enumerations的一些知识。structures:1:我们知道数组是相同类型元素的集合,从最简单定义的角度理解,我们可以认为struct是任意类型元素的集合,默认的访问级别是public。2:在内存中,struct成员分配地址的顺序是按照成员声明的顺序分配的,然而struct对象的内存大小并不简单是其成员内存大小的和。为了节省分配的内存原创 2016-05-10 10:20:33 · 670 阅读 · 0 评论 -
第9章:statements
相比于c++98的老标准,c++11新标准增加了范围for语句(range for statement)。 范围for语句的语法形式为:for (declaration:expression) statementexpression表示的必须是一个序列,比如用花括号括起来的初始值列表,数组,或者vector和string等类型的对象。这些类型共有的一个特点是拥有能返回迭代器的begin()原创 2016-05-10 23:02:34 · 335 阅读 · 0 评论 -
第22章:run time type information
\quad运行时类型识别的功能由两个运算符实现:1:typeid 运算符:用于返回表达式的类型; 2:dynamic_cast 运算符:用于将基类的指针或引用安全的转化为派生类的指针或引用。\quad当我们将这两个运算符用于某种类型的指针或引用时,并且该类型含有虚函数时,运算符将使用指针或引用所绑定对象的动态类型。一:dynamic_cast运算符:dynamic_cast运算符的使用形式如下所示原创 2016-07-18 17:05:56 · 595 阅读 · 0 评论