![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C Primer
文章平均质量分 76
yqyy1989
这个作者很懒,什么都没留下…
展开
-
C++ Primer 笔记3
1、特殊的字符数组 char ca1[] = {'C', '+', '+'}; // no null char ca2[] = {'C', '+', '+', '\0'}; // explicitnull char ca3[] ="C++"; //null terminator addedautomatically char *p = ca1; while(*p)原创 2013-11-05 08:17:38 · 404 阅读 · 0 评论 -
C++ Primer 笔记18
1、C++中,内存分配和对象构造紧密纠缠,使用new表达式的时候,分配内存,并在该内存中构造一个对象;使用delete表达式的时候,调用析构函数撤销对象,并将对象所用内存返还给系统。 C++提供下面两种方法分配和释放未构造的原始内存① allocator类,它提供可感知类型的内存分配。这个类支持一个抽象接口,以分配内存并随后使用该内存保存对象。② 标准库中的operator new原创 2013-11-05 08:18:24 · 385 阅读 · 0 评论 -
C++ Primer 笔记19
1、通过运行时类型识别(RTTI),程序能够使用基类的指针或引用来检索这些指针或引用所指对象的实际派生类型。 通过下面两个操作符提供RTTI① typeid操作符,返回指针或引用所指对象的实际类型② dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用 这些操作符只为带有一个或多个虚函数的类返回动态类型信息,对于其他类型,返回静态(即编译时)类型原创 2013-11-05 08:18:27 · 398 阅读 · 0 评论 -
C++ Primer 笔记20
1、可以在另一个类内部定义一个类,这样的类是嵌套类(nestedclass),也称为嵌套类型。 外围类和嵌套类的对象时互相独立的。嵌套类的名字在其外围类的作用域中可见,但在其他类作用域或定义外围类的作用域中不可见。外围类对嵌套类的成员没有特殊访问权,并且嵌套类对其外围类的成员也没有特殊访问权。2、为了在外围类的外部定义类体,必须用外围类的名字限定嵌套类的名字。 嵌套类可以直接引用外围类的静原创 2013-11-05 08:18:31 · 409 阅读 · 0 评论 -
简单的COM对象
//////////////////////////////////////myInterface.h#ifndef __INTERFACE__#define __INTERFACE__#include #include #include using namespace std;const IID IID_IX = {0xea67aab3, 0xbe5a, 0x433a,原创 2013-11-05 08:18:41 · 398 阅读 · 0 评论 -
关于C++随机数生成中种子值设置的…
今天编了一个遗传算法的小程序。在个体类的默认构造函数中,使用随机数来进行二进制编码的初始化。C++中的随机数其实是伪随机数,即随机数函数产生的是通过公式计算出来的一系列伪随机数,这个公式会采用一个种子数计算出一个数,而该数将成为产生下一个数的种子数。基于产生随机数的原理,如果采用相同的种子的话,两次调用随机数后产生的随机数序列将是一样的。一般情况下,在C++中使用当前时间作为种子数,这样两次调用随原创 2013-11-05 08:18:46 · 1067 阅读 · 0 评论 -
抽象工厂方法C++实现
看了设计模式中的抽象工厂方法,书中用到了C#中的反射技术,而C++中没有反射,我就参考MFC中为实现动态创建而设计的DYNCREATEMACRO的方法来克服抽象工厂的不足。使工厂类完全不更改的情况下就能随意添加新的产品类。工厂类通过读取配置文件动态创建对象。Utility.hclass COperator;typedef COperator* (*pCreateFun)();s原创 2013-11-05 08:18:56 · 528 阅读 · 0 评论 -
C++ Primer 笔记之const总结
1、定义const对象 const intbufSize = 512;2、const对象默认为文件的局部变量 在全局作用域里定义非const变量时,它在整个程序中都可以访问。我们可以把一个非const变量定义在一个文件中,假设已经做了合适的声明,就可在另外的文件中使用这个变量。与其他变量不同,除非特别说明,在全局作用域声明的const变量是定义该对象的文件的局部变量。此变量只存在原创 2013-11-05 08:17:33 · 384 阅读 · 0 评论 -
C++ Primer 笔记4
1、一般而言,标准库提供的bitset操作更直接、更容易阅读和书写、正确使用的可能性更高。而且,bitset对象的大小不受unsigned数的位数限制。通常来说,bitset优于整型数据的低级直接位操作。2、建议:只有在必要时才使用后置操作符。前置操作需要做得工作更少,只需加1后返回加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。3、whil原创 2013-11-05 08:17:40 · 388 阅读 · 0 评论 -
C++ Primer 笔记8
1、find函数检查两个迭代器实参标记范围内的每一个元素。只要找到与给定值相等的元素,find就会返回指向该元素的迭代器。如果没有匹配的元素,find就返回它的第二个迭代器实参,表示查找失败。2、关键概念:泛型算法永不执行容器提供的操作。算法从不修改基础容器的大小。如果需要添加或删除元素,则必须使用容器操作。3、accumulate函数:用于指定累加起始值的第三个实参是必要的,因为accu原创 2013-11-05 08:17:50 · 364 阅读 · 0 评论 -
C++ Primer 笔记12
1、在C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键。2、除了构造函数之外,任意非static成员函数都可以是虚函数。保留字virtual只在类内部的成员函数声明中出现,不能用在类定义体外部出现的函数定义上。3、派生类中虚函数的声明必须与基类中的定义完全匹配,但有一个例外:返回对基类型的引用(或指原创 2013-11-05 08:17:59 · 395 阅读 · 0 评论 -
C++ Primer 笔记14
1、任意类(模板或非模板)可以拥有本身为类模板或函数模板的成员,这种成员称为成员模板(member template),成员模板不能为虚。模板成员声明看起来像任意模板的声明一样:template classQueue{ public: template<classIt> Queue(It beg, Itend):head(0),tail(0){copy_elems(beg原创 2013-11-05 08:18:07 · 389 阅读 · 0 评论 -
C++ 杂烩
1、有4种情况,会导致“编译器必须为未声明constructor之classes合成一个default constructor”① 带有Default constructor的member class object② 带有Default constructor的base class③ 带有一个Virtual function的class,编译器会为他们合成一个defaultconstruc原创 2013-11-05 08:18:43 · 389 阅读 · 0 评论 -
C++ Primer 笔记13
1、面向对象编程所依赖的多态性成为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性。2、函数模板(functiontemplate):模板定义以关键字template开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,实参之间以逗号分隔。模板形参表不能为空。例 template int compare(constT& v1, const T&原创 2013-11-05 08:18:05 · 333 阅读 · 0 评论 -
C++ Primer 笔记11
1、重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符含义。2、作为类成员的重载函数,其形参看起来比操作数数目少1。 作为成员函数的操作符有一个隐含的this形参,限定为第一个操作数。3、一般将算术和关系操作符定义为非成员函数,而将赋值操作符定义为成员。当操作符为成员函数,this指向左操作数。操作符定义为非成员函数时,通常必须原创 2013-11-05 08:17:57 · 402 阅读 · 0 评论 -
C++ Primer 笔记10
1、复制构造函数、赋值操作符和析构函数总称为复制控制(copy control)。2、复制构造函数可用于:① 根据另一个同类型的对象显式或隐式初始化一个对象。② 复制一个对象,将它作为实参传给一个函数。③ 从函数返回时复制一个对象。④ 初始化顺序容器中的元素。⑤ 根据元素初始化式列表初始化数组元素。3、vector svec(5);编译器首先使用string默认构造函数创建一个临时原创 2013-11-05 08:17:55 · 407 阅读 · 0 评论 -
C++ Primer 笔记7
1、与其他标准库类型不同,对于pair类,可以直接访问其数据成员:其成员都是公有的,分别命名为first和second。只需使用普通的点操作符,即可访问其成员。2、除了构造函数,标准库还定义了一个make_pair函数,由传递给它的两个实参生成一个新的pair对象。3、“关联容器根据键的次序排列”这一事实就是一个重要的结论:在迭代遍历关联容器时,我们可确保按键的顺序访问元素,而与元素在容器中原创 2013-11-05 08:17:48 · 356 阅读 · 0 评论 -
C++ Primer 笔记15
1、通过异常我们能够将问题的检测和问题的解决分离,这样程序的问题检测部分可以不必了解如何处理问题。Sales_item operator +(const Sales_item& lhs, constSales_item& rhs){ if(!lhs.same_isbn(rhs)) throw runtime_error("Data mustrefer to same ISBN原创 2013-11-05 08:18:18 · 388 阅读 · 0 评论 -
C++ Primer 笔记16
1、命名空间(namespace)为防止名字冲突提供了更加可控的机制,命名空间能够划分全局命名空间,这样使用独立开发的库就更加容易,一个命名空间时一个作用域,通过在命名空间内部定义库中的名字,库的作者(以及用户)可以避免全局名字固有的限制。命名空间作用域不能以分号结束。2、在命名空间中定义的名字可以被命名空间中的其他成员直接访问,命名空间外部的代码必须指出名字在哪个命名空间中。可以编写usi原创 2013-11-05 08:18:20 · 358 阅读 · 0 评论 -
C++ Primer 笔记17
1、多重继承Primer 笔记17" TITLE="C++ Primer 笔记17" />class Panda : public Bear, public Endangered{...};基类构造函数按照基类在类派生列表中的出现次序调用。对Panda而言,基类初始化的次序是:① ZooAnimal,从Panda的直接基类Bear沿层次向上的最终基类。② Bear,第一个直接基类原创 2013-11-05 08:18:22 · 495 阅读 · 0 评论 -
char 转wchar_t 及wchar_t转char
char 转wchar_t 及wchar_t转char原文来自http://haofu123.blog.163.com/blog/static/178294920096243161997/利用widechartomultibyte来转换的函数通常适合于window平台上使用#include #include int _tmain(int argc, _tchar* argv原创 2013-11-05 08:18:52 · 551 阅读 · 0 评论 -
DLL与LIB的区别和联系
什么是lib文件,lib和dll的关系如何 (转,原文地址未知)(1)lib是编译时需要的,dll是运行时需要的。如果要完成源代码的编译,有lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。(2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的原创 2013-11-05 08:18:54 · 418 阅读 · 0 评论 -
C++ Primer 笔记1
1、标准库定义了4个IO对象:cin, cout, cerr, clog。2、读入未知数目的输入:while(cin>>value)...3、windows系统中使用Ctrl + Z来输入文件结束符。4、C++是静态类型语言,在编译时执行类型检查,所以在程序中使用某个名字之前,必须先告诉编译器该名字的类型。5、表示整数、字符和布尔值的算术类型合称为整型。6、字符类型有两种:char 和原创 2013-11-05 08:17:31 · 382 阅读 · 0 评论 -
C++ Primer 笔记2
1、因为历史原因以及为了与C语言兼容,字符串字面值与标准库string类型不是同一类型,这一点很容易引起混乱,编程时一定要注意区分字符串字面值和string数据类型的使用,这很重要。2、string类型的输入操作符: 读取并忽略开头所有的空白字符(如空格,换行符,制表符) 读取字符直至再次遇到空白字符,读取终止。3、读入未知数目的string对象:和内置类型的输入操作符一样原创 2013-11-05 08:17:36 · 402 阅读 · 0 评论 -
C++ Primer 笔记5
1、编译器忽略为任何数组形参指定的长度,例如void process(const int a[10]){...}尽管上述代码假定所传递的数组至少含有10个元素,但C++语言没有任何机制强调实现这个假设。下面的调用都是合法的:int i = 0, j[2] = {0, 1};process(&i);//ok, &i is int *;probable run-time errorpro原创 2013-11-05 08:17:42 · 446 阅读 · 0 评论 -
C++ Primer 笔记6
1、IO类型在3个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于读写存储在内存中的string对象。2、标准库还定义了一组相关的类型,支持wchar_t类型。每个类都加上“w”前缀,以此与char类型的版本区分开来。wchar_t类型的标准输入对象是wcin,标准输出是wcout,而标准错误是wcerr。每原创 2013-11-05 08:17:44 · 376 阅读 · 0 评论 -
C++ Primer 笔记6
1、将一个容器复制给另一个容器时,类型必须匹配:容器类型和元素类型都必须相同。2、尽管不能直接将一种容器内的元素复制给另一种容器,但系统允许通过传递一对迭代器间接实现该功能。使用迭代器时,不要求容器类型相同。容器内的元素类型也可以不相同,只要它们互相兼容,能够将要复制的元素转换为所构造的新容器的元素类型,即可实现复制。3、C++语言中,大多数类型都可用作容器的元素类型。容器元素类型必须满足以原创 2013-11-05 08:17:46 · 362 阅读 · 0 评论 -
C++ Primer 笔记9
1、每个类可以没有成员,也可以定义多个成员,成员可以是数据、函数或类型别名。2、将关键字const加在形参列表之后,就可以将成员函数声明为常量,const必须同时出现在声明和定义中。3、可以在类定义体内部指定一个成员为inline,作为其声明的一部分。或者,也可以在类定义体外部的函数定义上指定inline。4、类的定义以分号结束,分号是必须得,因为在类定义之后可以接一个对象定义列表,定义必原创 2013-11-05 08:17:52 · 416 阅读 · 0 评论 -
输出任意一个tuple的元素
运用C++11中的variadic template我们可以实现输出任意一个tuple元素代码如下:#include #include #include template struct seq {};template struct genseq : genseq<N - 1, N - 1,S...>{};template struct genseq{原创 2013-11-05 08:19:22 · 737 阅读 · 0 评论