随笔分类 -  c++学习心得

摘要:1、内联函数是可调试的,在debug版本中没有实现真正的内联,release中才会。 2、内联函数的函数声明和函数代码放在符号表(编译器搜集和保存字面常量和某些符号常量的地方)中,编译器对函数进行类型安全性检查,如果正确则替换调用语句,省去函数调用开销。 3、assert是debug版本才生效的一个 阅读全文
posted @ 2017-11-26 18:21 一种微笑
摘要:1、operator加运算符表示运算符重载,运算符就是函数名。 2、容器类的类都需要重载=、==和<等运算符,用于排序或者复制元素。 3、不能重载“.”,反引用类成员指针".*",作用域解析符"::",三元运算符“?:",sizeof(),typeid(),类型转换符static_cast<>, d 阅读全文
posted @ 2017-11-26 17:45 一种微笑
摘要:1.相比于C函数,C++增加了重载,内联,const(仅用于成员函数)和virtual(仅用于成员函数)机制。 2.重载函数只能靠参数列表而不能靠返回值来区分。 3.全局函数和类的成员函数名字相同不能作为重载,作用域不同。 4.成员函数重载条件: (1)有相同的作用域(同一个类中)。 (2)函数名字 阅读全文
posted @ 2017-11-19 23:22 一种微笑
摘要:class myString { public: myString() { len = 0; m_str = new char[1]; m_str[0] = ‘\0’; } ~myString() { delete []m_str; } myString(const myString &obj) { 阅读全文
posted @ 2017-11-19 20:51 一种微笑
摘要:一、非静态局部对象:如A obj; A obj = b; 程序执行到定义对象的地方,没有提供初始值,调用默认构造函数,如果提供了初始值,调用带参构造函数或者拷贝构造函数,在作用域外调用析构函数。 二、静态局部对象:如static A obj; static A obj = b; 程序执行到定义对象的 阅读全文
posted @ 2017-11-19 20:40 一种微笑
摘要:一、继承: 1. 派生类是基类的is-a(is-a-kind-of)关系。 2.基类的所有功能对派生类都有意义。 3.虚继承是解决多重继承中,对基类二义性问。详细原理参考http://blog.csdn.net/u013630349/article/details/47057929。 二、组合: 1 阅读全文
posted @ 2017-11-19 17:48 一种微笑
摘要:1.头文件包含顺序: 头文件: (1)包含当前工程所需要的自定义文件。 (2)包含第三方程序库头文件。 (3)包含标准头文件。 源文件: (1)包含该源文件对应的头文件。 (2)包含当前工程所需要的自定义文件。 (3)包含第三方程序库头文件。 (4)包含标准头文件。 2.宏定义 (1)为文件作用域。 阅读全文
posted @ 2017-11-16 23:56 一种微笑
摘要:联合Union 1.一个联合变量的地址和一个联合变量任意一个成员地址相同。 2.同类型的联合变量不能比较大小。 3.可以定义构造函数和析构函数,但不能有虚函数和静态成员函数,不能作为基类或派生类。 枚举enum 1.枚举可以定义相同的值。 2.当整数強转为枚举且超过枚举值时,此时值为未知。 3.匿名 阅读全文
posted @ 2017-11-15 23:58 一种微笑
摘要:1. struct默认是public,class默认是private。 2.位域: struct Time { unsigned int a : 1; unsigned int b : 2; }; C语言的位域只能是int,unsigned int,signed int等类型,C++允许char,l 阅读全文
posted @ 2017-09-13 23:11 一种微笑
摘要:1. 指针的*和后面的变量名结合,如: int* a,b,c <==> int *a, int b, int c 2. 全局变量的指针初始值为NULL。 3.void* 不能用*指向其对应的变量值,也不能作++操作,无指针指向其字节数信息。 4. int test[2] =1;表示计算地址test+ 阅读全文
posted @ 2017-09-04 23:43 一种微笑
摘要:函数堆栈的三个用途: 1.进入函数前保存环境变量和返回地址; 2.进入函数时保存实参的拷贝; 3.保存函数体内的局部变量。 函数调用规范:定义函数实参压栈,退栈以及堆栈释放方式。 1._cdecl:函数默认规范,参数从右到左依次压栈,便于可变参数函数,C++静态成员函数和友元函数使用此规范。 2._ 阅读全文
posted @ 2017-09-02 16:17 一种微笑 阅读(174) 评论(0) 推荐(0)
摘要:1. #define 宏常量为字面常量,编译前就被替换。 2. const常量: C为值不能修改的变量,因此会分配内存空间,并且默认是外连接的,因此const定义在头文件并被多个c文件包含时,链接会出错。 C对于static const,static const定义在头文件并被多个c文件包含时,每个 阅读全文
posted @ 2017-08-25 23:00 一种微笑 阅读(209) 评论(0) 推荐(0)
摘要:1.C与C++ NULL区别 #ifdef_cplusplus #define NULL 0 #else #define NULL ((void*)0) #endif 2.字节是内存编址的最小单位。 3.大小端转换:如变量 short test = 0x0D25 大端CPU:低字节放在高地址,高字节 阅读全文
posted @ 2017-08-20 22:37 一种微笑 阅读(144) 评论(0) 推荐(0)
摘要:c没有重载。c++(overloading)重载:函数名相同但参数列表不相同(参数数量或参数类型不同)的方法。1.方法名必须相同。2.参数列表必须不相同,但和参数列表的顺序无关。3.返回值类型可以不相同,但不是必须,例如double g()和int g()不是重载,会报错(重复声明)。int f(int, float)->c++编译后为_int_f_int_float,注意const会被忽略,因此它和 int f(const int, const float)为同一声明。c++(overriding)重写:派生类重写基类的虚函数。1.只有虚方法和抽象方法才能够被重写。2.方法名必须相同。 阅读全文
posted @ 2013-10-25 20:59 一种微笑 阅读(414) 评论(0) 推荐(0)
摘要:前序遍历(根左右):void InOrderTree(Node* root){ if(root!=NULL){ preOrderTree(root->left); coutdataright); }}void InOrderTree(){ stact s; Node* p=root; while(p!=NULL||!s.empty()){ while(p!=NULL){ s.push(p); p=p->left; } if(!s.empty()){ ... 阅读全文
posted @ 2013-10-25 20:52 一种微笑 阅读(679) 评论(0) 推荐(0)
摘要:char * strcat(char * dest,const char * src){ assert((dest!=NULL)&&(src!=NULL)); char *ret=dest; while(*dest++); dest--; while(*dest++=*src++); return ret;}char * strcpy(char * dest,const char * src){ assert((dest!=NULL)&&(src!=NULL)); char *ret=dest; while(*dest++=*src++);... 阅读全文
posted @ 2013-10-25 20:46 一种微笑 阅读(625) 评论(0) 推荐(0)