自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 C++ 视频学习笔记

1、C++与C有什么不同?【解答】C++与C语言最大的不同在于解决问题时思维方式的不同,C++采用面向对象思维,而C语言则采用面向结构思维。面向结构思维的宗旨就是将一个大程序拆成一个个很小的结构,结构(或叫方法)就是实现一个或多个功能的代码块。面向结构思维就是要将一个大程序划分为若干个很小的结构,每个结构都完成一个或多个功能,所有结构集合起来就可以完成一个大功能。面向结构编程思维有

2014-12-21 20:49:34 277

原创 C++ primer习题笔记

1、解释下面每个函数模板的定义并指出是否有非法的,改正所发现的错误。(e)typedef char Ctype;          template Ctype f5(Ctype a);【解答】(e)合法,定义了一个模板函数f5,该函数的返回类型与形参类型相同,均可绑定到任何类型(而不一定是char类型)。2、何时必须使用typename?【解答】如果要在函数模

2014-12-21 09:53:50 395

原创 C++ primer 习题笔记第13~15章

1、下面第二个初始化不能编译。可以从 vector 的定义得出什么推断?vector v1(42);vector v2 = 42;【解答】若能编译成功说明,这是个复制初始化,创建 v2 时,首先调用接受一个 int 型形参的 vector 构造函数,创建一个临时 vector 对象,然后再调用复制构造函数用这个临时对象来初始化 v2。现在不能编译,说明vector 没有定义复制构造

2014-12-19 11:25:33 512

原创 C++ primer 习题笔记第10~12章

1、 假定 v 是 vector 类型的对象,则调用accumulate(  v.begin(),  v.end(),  0  )是否有错?如果有的话,错在哪里?【解答】没有错,accumulate 函数必须满足第三个实参的类型与容器内的意思匹配,或者可以转化为第三个实参的类型。本题中 double 可以转化为 int 类型,但是会有较大误差。2、算法不改变它所操纵的容器的大小

2014-12-18 14:32:34 419

原创 C++ primer习题笔记第7~9章

1、下面的程序虽然是合法的,但可用性还不够好,指出并改正该程序的局限。bool test( string& s) { return s.empty();} 【解答】其局限在于:此处使用引用形参的唯一目的是避免复制实参,但没有将形参定义为const引用,从而导致不能使用字符串字面值调用该函数(因为非const引用形参只能与完全同类型的非const对象关联)。可更正为:bool

2014-12-16 10:09:52 345

原创 C++ primer 习题笔记第5~6章

1、定义术语“溢出”的含义,并给出导致溢出的三个表达式。【解答】溢出:表达式的求值结果超出了其类型的表示范围。如下表达式会导致溢出(假设 int  类型为 16  位):1000 * 100032766 + 53276 * 20在这些表达式中,各操作数均为 int  类型,因此这些表达式的类型也是 int,但它们的计算结果均超出了 16  位 int  型的表示范围(-

2014-12-15 15:37:52 298

原创 C++ primer习题笔记第4章

1、解释下列声明语句,幵指出哪些是非法的,为什么?(d) int* ip, ip2;(e) const int i = 0, *p = i;【解答】(d)合法。定义了 int  对象 ip2  和指向 int  型对象的指针 ip。(e)合法。定义了 const int  型对象 i  和指向 const int  型对象的指针 p,i  初始化为 0,p  初始化为

2014-12-13 16:57:07 314

原创 C++ primer习题笔记第1~3章

1、C++Primer课后习题解答(第1-18章完整答案)完整版:http://wenku.baidu.com/link?url=-q7Mevb0O47ao7e73K3LR5Rnv-pOD4YLkwsl6vVhb9gYpfpYE8xDa9OuYLhdwFRQlumx_9XpCgTKQhoQoiCCk3A22LlyHYx51viv313vSCG2、

2014-12-11 17:00:07 758

原创 嵌套类、联合Union和局部类

1、在另一个类内部定义一个类,这样的类是嵌套类。2、在其类外部定义的嵌套类成员,必须定义在定义外围类的同一作用域中,在其类外部定义的嵌套类的成员,不能定义在外围类内部,嵌套类的成员不是外围类的成员。3、嵌套类可以直接引用外围类的静态成员、类型名和枚举成员。4、联合(union)是一种特殊的类,一个union对象可以有多个数据成员,但在任何时刻,只有一个成员可以有

2014-12-11 10:01:03 553

原创 运行时类型识别

1、通过运行时类型识别(RTTI),程序能够使用基类的指针或引用来检索这些指针或引用所指对象的实际派生类型。1)typeid操作符,返回指针或引用所指对象的实际类型。2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用。2、dynamic_cast操作的形式如下:dynamic_cast(val)Type是转换的目标类型,而val是

2014-12-10 22:34:53 420

原创 优化内存分配

1、C++的内存分配是一种类型化操作:new为特定类型分配内存,并在新分配的内存中构造该类型的一个对象。new表达式自动运行合适的构造函数来初始化每个动态分配的类类型对象。2、在每种情况下(预先分配内存以保存用户级对象或者保留类的内部数据)都需要将内存分配与对象构造分离开。3、C++提供下面两种方法分配和释放未构造的原始内存:1)allocator类,它提供可感知类型的

2014-12-10 21:06:26 316

原创 多重继承

1、虚继承:虚继承是一种机制,类通过虚继承指出它希望共享其虚基类的状态,在虚继承下,对给定虚基类,无论该类在派生类层次中作为虚基类出现多少次,只继承一个共享的基类子对象。共享的基类子对象称为虚基类。如:class istream:public virtual ios{ ... };        class ostream:virtual public ios{ ... };     

2014-12-10 21:03:21 203

原创 命名空间

1、命名空间定义以关键字namespace开始,后接命名空间的名字。2、命名空间可以在全局作用域或其他作用域内部定义,但不能在函数或类内部定义。3、命名空间作用域不能以分号结束。4、using声明:如:using cplusplus_primer::Query;using声明之后,程序可以无须cplusplus_primer限定符而直接使用名字Query

2014-12-10 20:10:11 561

原创 再谈面向对象编程

1、向基类构造函数传递实参:派生类构造函数的初始化列表只能初始化派生类的成员,不能直接初始化继承成员,但派生类构造函数可以通过将基类包含在构造函数初始化列表中来间接初始化继承成员。如:class Bulk_item:public Item_base{       public:           Bulk_Item(const std::string& book,double sal

2014-12-09 20:13:58 251

原创 面向对象编程(Object-oriented programming,OOP)

1、在C++中,基类必须指出希望派出类重定义哪些函数,定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。2、在C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的。3、保

2014-12-09 20:13:05 333

原创 转换与类类型

1、可以定义转换操作符,给定类类型的对象,该操作符将产生其他类型的对象。2、转换操作符是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字operator之后跟着转换的目标类型:operator type(); //type表示内置类型名、类类型名或由类型别名所定义的名字如:class SmallInt{          p

2014-12-09 20:12:19 221

原创 重载操作符

1、重载操作符是具有特殊名称的函数:保留字operator后接需定义的操作符符号。2、重载操作符必须具有至少一个类类型或枚举类型的操作符。3、操作符的优先级、结合性或操作数目不能改变。重载操作符并不保证操作符的求值顺序,尤其是,不会保证内置逻辑AND、逻辑OR和逗号操作符的操作数求值。4、使用重载操作符的方式,与内置类型操作数上使用操作符的方式一样。假定item

2014-12-09 20:11:34 448

原创 管理指针成员

1、C++采用一下三种方法之一管理指针成员:1)指针成员采用常规指针型行为。这样的类具有指针的所有缺陷但无需特殊的复制控制。2)类可以实现所谓的“智能指针”行为。指针所指向的对象是共享的,但类能够防止悬垂指针。3)类采用值型行为。指针所指向的对象是唯一的,由每个类对象独立管理。2、定义智能指针的通用技术是采用一个使用计数。智能指针类将一个计数器与类指向的对象想关联,使用计数

2014-12-09 20:10:01 219

原创 复制控制

1、复制构造函数:一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显示使用复制构造函数。当将该类型的对象传递给函数或从函数返回该类型的对象时,将隐式使用复制构造函数。2、析构函数:构造函数的互补,当对象超出作用域或动态分配的对象被删除时,将自动应用析构函数。析构函数可用于释放对象构造时或在对象的生命

2014-12-09 20:09:16 281

原创 友元和static类成员

1、友元机制允许一个类将其非公有成员的访问权授予指定的函数或类,友元的声明以关键字friend开始,它只能出现在类定义的内部。如:class Screen{        //Window_Mgr must be defined before class Screen       friend Window_Mgr&  Window_Mgr::relocate(Window_Mgr::

2014-12-09 20:08:19 561

原创

1、在类内部定义的函数默认为inline。2、将关键字const加在形参表之后,就可以将成员函数声明为常量。如:double  avg_price() const;const成员不能改变其所操作的对象的数据成员,const必须同时出现在声明和定义中。3、如果类是用struct关键字定义的,则在第一个访问标号之前的成员是公有的;如果类是用class关键字定义的,则这些

2014-12-09 20:07:15 355

原创 再谈迭代器

1、C++语言还提供另外三种迭代器:1)插入迭代器:这类迭代器与容器绑定在一起,实现在容器中插入元素的功能。2)iostream迭代器:这类迭代器可与输入或输出流绑定在一起,用于迭代遍历所关联的IO流。3)反向迭代器:这类迭代器实现向后遍历,而不是向前遍历,所有容器类型都定义了自己的reverse_iterator类型,由rbegin和rend成员函数返回。2、iostre

2014-12-09 20:06:02 300

原创 插入迭代器

1、插入器是一种迭代器适配器,带有一个容器参数,并生成一个迭代器,用于在指定容器中插入元素。2、back_insert,创建使用push_back实现插入的迭代器      front_insert,使用push_front实现插入      inserter,使用insert实现插入操作,除了所关联的容器外,inserter还带有第二个实参:指向插入起始位置的迭代器。inse

2014-12-09 20:04:45 209

原创 泛型算法

1、算法基于迭代器及其操作实现,而并非基于容器操作。使用泛型算法必须包含algorithm头文件。2、int sum = accumulate(vec.begin(),vec.end(),42);accumulate函数将它的一个内部变量设置为指定的初值,然后在此初值上累加输入范围内所有元素的值。accumulate算法返回累加的结果,其返回类型就是其第三个实参的类型。

2014-12-09 20:02:26 242

原创 关联容器

1、关联容器支持通过键来高校地查找和读取元素,两个基本的关联容器类型是map和set。map的元素以键-值对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。2、关联容器类型:map                                关联数组:元素通过键来存储和读取set         

2014-12-09 19:59:32 318

原创 容器适配器

1、三种容器适配器:stack、queue和priority_queue。2、stack栈可以建立在vector、list或者deque容器之上,而queue适配器要求其关联的基础容器必须提供push_front运算,因此只能建立在list容器上,而不能建立在vector容器上。priority_queue适配器要求提供随机访问功能,因此可建立在vector或deque容器上,但不能建

2014-12-09 19:57:21 311

原创 顺序容器

1、vector容器的自增长capacity操作获取在容器需要分配更多的存储空间之前能够存储的元素总数。reserve操作则告诉vector容器应该预留多少个元素的存储空间。2、string类型string类型提供与vector容器相同的操作。string操作:string s;string s(cp);  cp指向c风格字符串(以空字符null结束的)st

2014-12-09 19:55:55 271

原创 容器

1、顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,包括vector、list和deque(双端队列”double-ended queue)。     容器适配器:根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型,包括stack、queue和priority_queue类型。2、顺序容器类型顺序容器vector     

2014-12-09 19:51:52 288

原创 字符串流

1、sstream类型定义了一个有string形参的构造函数,这个构造函数将string类型的实参复制给stringstream对象。stringstream特定的操作stringstream strm;                   创建自由的stringstream对象stringstream strm(s);           创建存储s的副本的stringstream对

2014-12-09 19:50:49 263

原创 文件的输入和输出

1、fstream类型定义了两个自己的新操作——open和close。2、文件流对象的使用1)ifstream infile(ifile.c_str());      ofstream outfile(ofile.c_str());ifile和ofile存储读写的文件名的string对象2)ifstream infile;      ofstream outfile

2014-12-09 19:50:11 421

原创 IO条件状态

1、IO标准库管理一系列条件状态成员,用来标记给定的IO对象是否处于可用状态,或者碰到了哪种特定的错误。所有流对象都包含一个条件状态成员,该成员由setstate和clear操作管理。2、badbit标志着系统级的故障,如无法恢复的读写错误。如果出现的是可恢复的错误,如在希望获得数值型数据时输入了字符,此时则设置failbit标志。eofbit是在遇到文件结束符时设置的,此时同

2014-12-09 19:47:13 532

原创 IO标准库类型

1、iostreamistream从流中读取ostream写到流中去iostream对流进行读写;从istream和ostream派生而来2、fstreamifstream从文件中读取;由istream派生而来ofstream写到文件中去;由ostream派生而来fstream读写文件;由iostream派生而来3、sstreamistrings

2014-12-09 19:45:57 306

原创 函数声明

1、函数声明由函数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这三个元素被称为函数原型。2、如果有一个形参具有默认实参,那么,它后面所有的形参都必须有默认实参。如:string screenInit(string::size_type height = 24,string::size_type width = 80,char background

2014-12-09 19:45:13 930

原创 函数

1、函数不能返回另一个函数或者内置数组类型,但可以返回指向函数的指针,或指向数组元素的指针的指针。2、const形参:在调用参数时,如果该函数使用非引用的非const形参,则既可给该函数传递const实参,也可传递const的实参。在函数中,不可以改变实参的局部副本。尽管函数的形参是const,但是编译器却将fcn的定义视为其形参被声明为普通的int型:void fcn(con

2014-12-09 19:44:22 300

原创 try块和异常处理

1、C++的异常处理包括:throw 表达式,错误检测部分使用这种表达式来说明遇到了不可处理的错误。try 块,错误处理部分使用它来处理异常。由标准库定义的一组异常类,用来在throw和相应的catch之间传递有关的错误信息。2、try块try{    program-statements}catch(exception-specifier){    han

2014-12-09 19:43:26 463

原创 语句

1、if语句     if(condition)       statement1     else       statement22、switch语句switch(表达式){        case A1:             statement1        case A2:             statement2     

2014-12-09 19:42:32 177

原创 强制类型转换

1、强制类型转换:static_cast、dynamic_cast、const_cast和reinterpret_cast。2、dynamic_cast支持运行时识别指针或引用所指向的对象。      const_cast将转换掉表达式的const性质。     编译器隐式执行的任何类型转换都可以由static_cast显示完成。     reinterpret_c

2014-12-09 19:41:23 194

原创 表达式

1、求模操作符%:用于计算左操作数除以右操作数的余数。该操作符的操作数只能为整型,包括bool、char、short、int和long类型,以及对应的unsigned类型。2、逻辑操作符:expr1 && expr2   //logical ANDexpr1  ||  expr2   //logical OR仅当由expr1不能确定表达式的值时,才会求解expr2.短路

2014-12-09 19:40:00 196

原创 数组指针和保存指针的数组

1、数组指针:指向多维数组。如:int ia[3][4];       int (*ip)[4] = ia;  //ip points to an array of 4 ints       ip = &ia[2];   // ia[2] is an array of 4 ints从内向外阅读ip,*ip是int[4]类型——即ip是一个指向含有4个元素的数组的指针。2

2014-12-09 19:38:37 1531

原创 动态数组

1、每一个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区或堆。C语言程序使用一对标准库函数malloc和free在自由存储区中分配存储空间,而C++语言则使用new和delete表达式实现相同的功能。2、动态分配数组时,只需指定类型和数组长度,不必为数组对象命名,new表达式返回指向新分配数组的第一个元素的指针。如:int *pia =

2014-12-09 19:36:55 238

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除