随笔分类 - c++之父书的笔记
大师
摘要:char[] = "Beorn"; //array of 6 chars编译器会自动在字符串的末尾添加字符0.称以0结尾的字符串为c风格的字符串。所有的字符串常量都是 c风格的字符串。char* pc = "howdy"; // pc points to an array of 6 chars只有字符数组能够通过字符串进行初始化,但所有的数组都能够通过与其类型相匹配的值列表进行初始化。int ai[] = {1,2,3,4,5,6}; //array of 6 intsint ai2[100] = {0,1,2,3,4,5,6,7,8,9}; //the
阅读全文
摘要:template <class T> 或 template <typename T>有时称类模板为类型生成器。泛型编程依赖于显示模板参数的形式称为参数化多态(应该是翻译的问题,不像人说的话啊)。面向对象编程那个多态称为专用多态。都称为多态是因为每种类型都依赖于程序员通过一个单一的接口表示一个概念的多个版本。为什么使用模板? 为了灵活性和性能。当编译器编译一个使用模板的代码时,编译器将查看模板以及模板的参数类型。其目的在于获得足够的信息以生产优化代码。编译器试图要求模板必须在他被使用的位置完全定义。因此模板的设计者会试图将模板的定义放置在头文件中。建议:对于将在多个翻译单
阅读全文
摘要:如果一个类只能被用做基类,它就是一个抽象类。“protected ”用于构造函数来的目的是:保证我们不能直接创建其对象,其只有它的派生类可以直接使用。class B{public:virtual void f() = 0;virtual void g() = 0;}B b; //error B is abstracvirtual void f() = 0; 是一个纯虚函数,它必须在派生类中被覆盖. 注意,除非所有纯虚函数都被覆盖了,否则该派生类也是抽象的。class D2:public B{public:void f();};D2 d2; //errror:D2 is abstractcla.
阅读全文
摘要:枚举 enumeration 它指定一个值的集合,这些值用符号常量表示,称为枚举常量。enum Month{ jan = 1,feb,mar,apr,may,june,july,aug,sep,oct,nov,dec};如果你让编译器选择值,它赋予每个枚举量的值为上一个枚举量的值加1.不初始化第一个枚举量,编译器从零开始计数。Month m = feb;m = 7; //errorint n =m; //okMonth mm = Month(7); // uncheckedMonth 是一个独立类型,它可以隐式转换成整数,但整型不能隐式转换为Month类型。枚举量的作...
阅读全文
摘要:class complex{public: complex(double); //defines double-to-complex conversion complex(double,double); .......}complex z1 = 3.14; //ok convert complex z2 = complex(1.2,3.4);class Vector{ explicit Vector (int){cout << "调...
阅读全文
摘要:写一个vector 时候,当写到operator= 时候,总是出现一个运行时错误,如下:Windows has triggered a breakpoint in myVector.exe.This may be due to a corruption of the heap, which indicates a bug in myVector.exe or any of the DLLs it has loaded.This may also be due to the user pressing F12 while myVector.exe has focus.The output win
阅读全文
摘要:double* p0; //uninitialized:likely troubledouble* p1 = new double; //get(allocate)an unintialized doubledouble* p2 = new double(5.5); //get a double initialized to 5.5double* p3 = new double[5]; //get(allocate)5 uninitialized doubles
阅读全文
摘要:sizeof 用于用于一个类型名 或 表达式。对一个类型名来说,sizeof给出这种类型对象的大小;对于一个表达式来说,sizeof给出表达式结果的大小。sizeof 结果是一个正整数,sizeof(char) 单元大小被定义为1。
阅读全文
摘要:在每个成员函数中, 标识符this 就是指向用户调用成员函数所用对象的指针。 c++提供了更简单的语法,当我们访问当前对象的成员时,无需再写this。成员函数中无法修改this。Link* Link::inser(Link* n){ Link* p = this; if(n == 0) return p; if(p == 0) return n; n->succ = p; if(p->prev) p->prev->succ = n; n->prev = p->prev; p->prev = n; return n;}Link* Link::inser(
阅读全文
摘要:可以将引用看作是一个自动解引用的、不可改变的指针或是一个对象的别名。指针和引用在以下几个方面不同:为一个指针赋值会改变指针的值。为了得到一个指针,你通常需要使用new 或 &。为了访问一个指针指向的对象,你可以使用×或[].为一个引用赋值会改变引用指向的值。在初始化一个引用之后,你不能让引用指向其他对象。为引用赋值执行深度复制;为指针赋值不是这样。注意空指针。引用和指针都是通过使用内存地址来实现的。它们只是在内存地址上使用不同,为编程人员提供稍有不同的功能。
阅读全文
摘要:三种强制转换:static_cast 可以用于两种相关指针类型之间的强制转换,eg void* 与 double*.void* pv;int* pi = static_cast<int*>(pv);reinterpret_cast 可以在两个不相关的类型之间转换,例如 int double*.Register* in = reinterpret_cast<Register*>(0Xff);这里告诉编译器内存中的某个特定部分用作一个寄存器。const_cast 可以“抛弃常量修饰”。void f(const Buffer* p){ Buffer*b = const_cas
阅读全文
摘要:double* p = new double[max];delete[] p;delete p 释放由new分配给单个对象的内存。delete[] 释放由new分配给数组对象的内存。
阅读全文
摘要:类型需要析构函数的另外一个特征 是该类型具有指针成员或引用成员。如果有指针成员和引用成员,则该类型通常需要实现析构函数以及拷贝操作。通常,一个实现了析构函数的类型同时也需要实现拷贝构造函数与拷贝复制函数。作为一个经验法则:如果你有一个带有虚函数功能的类,则它需要一个虚析构函数,原因如下:1. 如果一个类有虚函数功能,它经常作为一个基类使用。2.如果它是一个基类,它的派生类经常使用new来分配。3.如果一个派生类对象使用new来分配,并且通过一个指向它的基类的指针来控制,那么它经常通过一个指向它的基类的指针来删除它。
阅读全文

浙公网安备 33010602011771号