C++编程思想_记录
紫云的博客
just go
展开
-
线程相关函数
1.pthread_cancel函数用来请求取消同一进程中的其他线程,它是非阻塞的。2.pthread_mutex_trylock试图加锁,失败则会返回EBUSY.3.pthread_mutex_timedlock试图加锁,超时则会返回ETIMEDOUT.4.读写锁也叫共享互斥锁。int pthread_rwlock_init(pthread_rwlock_t *restrict rw...原创 2022-08-11 08:57:39 · 386 阅读 · 0 评论 -
第十六章’模版式的三种stack
//模版式的三种stack,都使用了迭代器iterator!!!都是嵌套类iterator操纵其他类//外围类都有begin()和end()函数获取iterator对象//////////////////////////////////////////////////////////数组固定大小式的stack#ifndef ITERSTACKTEMPLATE_H#define ITE原创 2013-11-16 12:57:24 · 922 阅读 · 0 评论 -
第十六章
1.继承和组合提供了重用对象代码的方法,而c++的模版特征提供了重用源代码的方法2.在c++中,模版实现了参数化类型的概念3.头文件规则:“不要放置分配存储空间的任何东西”(这条规则是为了防止在连接期间的多重定义错误),但模版定义很特殊。在template之后的任何东西都意味着编译器在当时部位它分配存储空间,而是一直处于等待状态知道被一个模版示例告知。在编译器和连接器中有机制能去掉同一模版原创 2013-11-16 12:55:41 · 809 阅读 · 0 评论 -
第十一章
1.引用就像能自动地被编译器间接引用的常量型指针2.const int& q = 12; // (1)编译器分配了一个存储单元,它的值被初始化为12,于是这个引用就和这个存储单元联系上了,应用要点是任何引用必须和存储单元联系3.最常看见引用的地方是在函数参数和返回值中4.int *&i=pointer;指针的引用5.通过常量引用传递,它仅仅需要将地址压栈6.在c和c++中,参原创 2013-11-02 22:06:39 · 420 阅读 · 0 评论 -
第十三章的程序
//: C13:PStash.h// Holds pointers instead of objects#ifndef PSTASH_H#define PSTASH_Hclass PStash { int quantity; // Number of storage spaces int next; // Next empty space // Pointer storag原创 2013-11-03 19:08:54 · 598 阅读 · 0 评论 -
第六章的程序
#ifndef STASH2_H///头文件#define STASH2_Hclass Stash { int size; // 类型的大小 int quantity; // 此时的可用空间量非字节 int next; // 下一个空间 unsigned char* storage;////////unsigned char 是一字节的 void i原创 2013-11-03 19:06:36 · 622 阅读 · 0 评论 -
第十二章
1.运算符重载只是一种愈发上的方便,也就是说它只是另一种函数调用的方式;2.只有在能涉及类的代码更易写,尤其是更易读时(请记住,读代码的机会比写代码的机会多多了),才有理由重载运算符。3.函数的参数表中的参数个数取决于两个因素 a运算符是一元的还是二元的 b运算符被定义为全局还是成员函数4. friend const Integer operator++(Integ原创 2013-11-05 18:13:58 · 559 阅读 · 0 评论 -
第十三章
1.malloc()和free()是库函数,因此不再编译器控制范围之内。2.变量和对象的存储地点:静态存储区,栈上,堆上3.当创建C++对象时,会发生两件事:a为对象分配内存 b调用构造函数来初始化那个内存(编译器要求,否则编译失败)4.class Obj { int i, j, k; enum { sz = 100 };//一般用这种方式,设置数组大小 char b原创 2013-11-10 19:30:21 · 649 阅读 · 0 评论 -
第十三章的牛叉程序
//: C13:PStash.h// Holds pointers instead of objects#ifndef PSTASH_H#define PSTASH_Hclass PStash { int quantity; // Number of storage spaces int next; // Next empty space // Pointer storag原创 2013-11-11 21:20:06 · 712 阅读 · 0 评论 -
第六章的牛叉程序
#ifndef STASH2_H///头文件#define STASH2_Hclass Stash { int size; // 类型的大小 int quantity; // 此时的可用空间量非字节 int next; // 下一个空间 unsigned char* storage;////////unsigned char 是一字节的 void i原创 2013-11-11 21:24:25 · 679 阅读 · 0 评论 -
第十四章
1.string经常是用作组合对象的,使用自定义的组合对象,语法是一样的,访问控制是限制是层层延续的2.初始化列表中:基类用类名再是组合对象用对象名3.int *ip=new int(47);这使得内建类型的操作有点类似于对象。但这并不是真正的构造函数4.首先调用基类构造函数,再调对象成员,调用次序是声明时的顺序5.operator=不能被继承走6.定义了任何构造函数,系统就不原创 2013-11-11 22:00:00 · 658 阅读 · 0 评论 -
第十六章‘把工作都交给了PStash
清除工作: //for循环清除堆对象 (~PStash()调用析构~AutoCounter,接着析构调用verifier.remove(this);,接着remove调用erase。ok!!)//: C16:TPStash.h#ifndef TPSTASH_H#define TPSTASH_Htemplateclass PStash { int quantity; // 当前最大容原创 2013-11-16 12:56:23 · 799 阅读 · 0 评论 -
第十五章——抽象类,切片,多继承
//可以使用抽象类的指针或引用。抽象类里的纯虚函数可以是有函数体。任何情况下都不能得到抽象类的对象,抽象类和普通类的区别是,抽象类不能实例化#include using namespace std;class Pet {//抽象类public: static int i;///////////////////////抽象类的数据 virtual void speak()原创 2013-11-15 09:18:45 · 721 阅读 · 0 评论 -
第五章及其嵌套类
嵌套类的名字在其外围类的作用域中可见,但在其他类作用域或定义外围类的作用域中不可见。嵌套类的名字将不会与另一作用域中声明的名字冲突。嵌套类定义了其外围类中的一个类型成员。像任何其他成员一样,外围类决定对这个类型的访问在外围类的 public 部分定义的嵌套类定义了可在任何地方使用的类型在外围类的 protected 部分定义的嵌套类定义了只能由外围类、友元或派生类访问的类型,原创 2013-10-26 15:10:48 · 650 阅读 · 0 评论 -
第六章及其带有构造函数和析构函数的Stack
安全性措施: 用构造函数确保初始化(构造函数是通过正式的接口来强制初始化的) 用析构函数确保清除用表达式 sizeof c/sizeof *c获取数组的大小#include "C06 Nojump.h" X::X(){} void f(int i) { X x1;//将x1放在if之后会可能直接的跳过。所以必须放在函数头 if (i<原创 2013-10-27 10:17:39 · 843 阅读 · 0 评论 -
第一章
1.实际上,当创建新类时,程序员应当首先考虑组合,因为它更简单和灵活。2.有两种方法能使新派生类区别于原始基类。 a添加全新的成员。 b重载基类函数3.栈中的变量有时称为自动变量或局部变量;静态存储区简单说是内存的一个固定块,如全局变量和static变量。4.存在c++的第三方垃圾收集器5.异常是对象,标准输入输出流cin,cout是对象6.在进程中设立一些里程碑可以帮原创 2013-10-29 10:20:16 · 534 阅读 · 0 评论 -
第二章
1.分段编译2.预处理器指令用来节省输入,增加代码的可读性。3.连接器把一组目标模块(.obj)连接成为一个可执行程序,操作系统可以装载和运行。4.声明是向编译器介绍名字——标识符。它告诉编译器“这个函数或这个变量在某处可找到,它的模样像什么”。而定义是说“在这里建立变量”或“在这里建立函数”。5.对于带空参数表的函数C语言表示“一个可带任意参数的函数”,C++意味着“不带参数的函原创 2013-10-29 10:20:49 · 656 阅读 · 0 评论 -
第四章
1.购买的的库一般是编译好的的obj或lib或dll文件2.c和c++允许将任何类型的指针赋给void*。c允许将void指针赋给任何其他类型的指针,c++却是不允许3.称stash为抽象数据类型,也许这是因为它能允许从问题空间抽象概念到解空间4.有时当一个struct被编译器处理时,会增加额外的字节以使得边界整齐,这主要是为了提高执行效率5.一个没有数据成员只有成员函数的stru原创 2013-10-29 11:09:49 · 483 阅读 · 0 评论 -
第七章
1.重载函数名,无论是同一作用域还是不同作用域,编译器会用不同的内部名来区分重载函数。2.不同的编译器可能会产生不同的内部名。3.即使你可以看到,该函数是实际上的f(int) ,编译器不知道这一点,因为有人告知-通过明确的声明——该函数为 f(char)。因此,编译成功。在 C,链接器也将是成功的,但 在C + +中没有。因为编译器会修饰这些名字,定义函数为 f_int之类的名字,而调用函原创 2013-10-29 18:15:52 · 466 阅读 · 0 评论 -
第八章
1.预处理器只做些文本替代2.c++中的const变量默认为内部链接,当定义一个const时,必须赋一个值给它(函数返回的值也可以),除非作出了extern说明,由于是内部链接,所以多个编译单元里同名不会发生名字冲突extren const intbufsize;3.通常c++编译器并不为const创建存储空间,相反它把之歌定义保存在它的符号表里,但是上面的extern强制进行了存储空原创 2013-10-31 21:58:01 · 599 阅读 · 0 评论 -
第九章
1.预处理不允许访问类的成员数据。这意味这预处理器宏不能用作类的成员函数(这也是c++很少用宏的原因之一)2.内联函数能够像普通函数一样具有我们所有期望的任何行为。唯一不同之处是内敛函数在适当的地方像宏一样展开,所以不需要函数调用的开销。因此应该几乎永远不使用宏,只使用内联函数3.inline必须在函数体和声明处出现,否则,编译器将它作为普通函数对待4.一般应该把内联定义放在头文件里,原创 2013-11-01 12:45:05 · 613 阅读 · 0 评论 -
第十章
1.编译器在每次函数调用时使堆栈的指针向下移动一个适当的位置,为这些局部变量分配空间2.c和c++都允许在函数内部定义一个static对象,这个对象将存储在程序的静态数据区中3.无论什么时候设计一个包含静态变量的函数时,都应该记住多线程问题4.静态对象的析构函数在程序从main()中退出时,或者标准的c库函数exit()被调用时才被调用。多数情况下main()函数的结尾也是调用exit原创 2013-11-01 13:04:08 · 582 阅读 · 0 评论 -
第十五章
/*1.virtual应该保持写下去,易于代码阅读2.把函数体与函数调用相联系称为捆绑。a当捆绑在程序运行之前(由编译器和连接器)完成时,这称为早捆绑 b发生在运行时的捆绑称为晚捆绑或动态捆绑3.如果virtual函数没有重写,程序会自动第调用继承层次中“最近”的定义——编译器保证对于虚函数总是有某中定义。4.关键字virtual告诉编译器它不应当执行早捆绑,相反,它应当自动安装实现原创 2013-11-15 09:10:23 · 730 阅读 · 0 评论 -
第三章
1.为了方便管理应该分为 头文件 , 实现文件 和 使用文件2.跳出多层循环语句用goto语句(函数内);3.一旦我们间接引用一个void*,就会丢失关于类型的信息。这意味着在使用前,必须转换为正确的类型4.一般来说,应当避免使用void指针,只有在一些少见的特殊情况下才用。5.变量的作用域有变量所在的最近一对括号确定6.c语言中,static有含义:在某个作用域可连续访原创 2013-10-29 10:55:20 · 549 阅读 · 0 评论