高质量c++与c补漏
1、
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a,b;
int_ptr c,d;
b不是指针,int类型。上面代码可以放在main函数中,但头文件不可
2、封装 继承 多态 是面向对象程序设计的三大特性
3、寄存器变量,放在寄存器而非内存中,效率更高,一般是临时变量
4、继承中的父类的私有变量是在子类中存在的,不能访问是编译器的行为,是可以通过指针操作内存来访问的
5、函数指针赋值 void (*pf)(int n,char *s); pf=fun; 函数名为指针类型;函数重载的实质就是这个。
6、delete p只是把p指向的那一块内存给收回了,而p本身这个变量还是存在的。删除一个指针后应该将其其值赋为0。
7、c++尽量采用引用传递,为了保证程序的健壮性加const修饰,如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。
void StringCopy(char *strDestination,const char *strSource);
输入参数以值传递的方式传递对象,则宜改用“const &”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。8、p是指向结构体的指针,a为结构体的一个成员变量,则(*p).a表示访问结构体中的变量a,或为为p->a
9、const主要用在3个地方:函数参数传递时,函数返回值,函数参数括号后。
10、*this表示当前的对象
11、sizeof 是操作符,size_t byte6 = sizeof 2.00000000000000000000;在32位机上为8
12、本函数中释放指针;
13、构造函数是不能设置为私有的。
14、++的结合性为右结合,所以++++i合法,而i++++不合法,可以改为(i++)++;
15、const对象只能调用const成员函数。
16、在C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数,建议将成员函数的定义与声明分开
17、不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明。
18、Box::Draw 类::名
19、定义变量的同时初始化该变量(就近原则)
20、风格:空行 代码行 空格 对齐 长行拆分 * 和 & 紧靠变量名 命名
DrawBox(); // 全局函数 box->Draw(); 动宾词组 // 类的成员函数 动词
int minValue;
int maxValue; 互斥意义的变量或相反动作的函数
const int MAX = 100;常量全用大写的字母
static int s_initValue; // 静态变量 加前缀s_(表示static)。
类的数据成员加前缀m_(表示member),
21、每个case语句的结尾不要忘了加break,不要忘记最后那个default分支
22、const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:编译器类型安全检查,调试
23、const数据成员的初始化只能在类构造函数的初始化表中进行,不能在类声明中初始化const数据成员。
24、类中的枚举常量来实现整个类中都恒定的常量,枚举常量不会占用对象的存储空间,它们在编译时被全部求值
25、C语言中,凡不加类型说明的函数,一律自动按整型处理。却容易被误解为void类型。main()
26、getchar的确不是char类型,而是int类型,int getchar(void);
27、临时变量return int(x + y);
String temp(s1 + s2);临时对象
28、assert((pvTo != NULL) && (pvFrom != NULL)); // 使用断言在函数的入口处
29、引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
30、引用的主要功能是传递函数的参数和返回值。C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。
31、“引用传递”的声明象“指针传递”,实现象“值传递”。指针调用传引用,引用调用传值,
内存管理
32 字符和字符串比较
string filename = "./grabcut/HLG00002.jpg";
cout << filename.c_str()[0] << endl;
char c_1 = '.';
cout << c_1 << endl;
cout << ('.' == filename.c_str()[0]) << endl;
std::string new_url = "http:" + filename;
cout << (new_url) << endl;