虽然有一定的基础,但是C++实在是细节繁多,有时候看似读得通源码,但实际上具体的实现细节上仍然会出现不清楚的地方。
最近准备重新过一遍《C++ Primer》,这篇博客记录一些对个人有启发的知识点:
1.void main() rand(void) void代表该函数没有返回值,或者该函数不接受任何返回值,由于不返回值,所以不能将该函数调用放在赋值语句或其他表达式中,使用单纯的函数调用
2.return 函数声明之后,该函数的返回类型确定, 在main()函数中调用函数时,return即为调用时使用的值。
3.const 声明常量 比#define好的地方 (1)明确制定类型 (2)使用C++的作用域规则将定义限制在特定的函数或文件(3)可以将const用于更复杂的类型。
4.定义指针 int *p int* p 对编译器来说是完全一样的,但是int* p,k;就是定义了一个指针p和一个int变量k
5. ?:运算符, 如果表达式1为真,则输出表达式2的值,如果表达式1为假,则输出表达式3的值
ep: 5 > 3 ? 10 : 15 // 5 > 3为真,则返回表达式2的值 10
ep: 3 > 5 ? 10 : 15 // 3 > 5为假,则返回表达式3的值 15 c = a > b ? a : b a = 25 b = 28 则 c = 28
6. 读写文件使用 outFile.open("carinfo.txt") 然后将outFile当作cout用,inFile.open("carinfo.txt") 然后将inFile当作cin用
7. 二维数组,ar2[r][c] == *( *( ar2 + r ) + c )
ar2 第一行,有四个整型数组量
ar2 + r 第r行,有四个整型数组量
*( ar2 + r ) 指向第r行的第一个整型数组量
*( ar2 + r ) + c 指向第r行的第c个整型数组量
*( *( ar2 + r ) + c) 第r行的第c个整型数组量的值
8. 指针与数组, 普通整型指针, int k, int * p ; 其中 &k 与 p 等价, k 与 * p 等价
对于数组指针 char * pstr = new char[ n + 1] ; pstr[n] 与 *(pstr + n) 等价
9.引用与指针用作函数参数 指针用作函数参数 void set_pcp ( free_throw * pt) set_pcp( &one ) free_throw为定义好的结构体;
引用用作函数参数 void set_pc ( free_throw & ft ) set_pc ( one ); 这两种方式是等价的 one 与 ft/pt 同时变化 引用。
10.返回引用与返回值的区别 free_throw & accumulate ( ''' ) ///返回给target的引用 即原始的team 改变
free_throw accumulate ( free_throw & target, const free_throw &source ) ///返回给target 即 team的拷贝 team不变
11. 面向对象编程(oop)的特性 :
抽象 / 封装和数据隐藏 / 多态 / 继承 / 代码的可重用性 。 class 默认访问类型 private / struct 默认访问类型 public
12. 构造函数和析构函数 Stock garment ( "Fury" , 50 , 2.5 ) /等价与/ Stock garment = Stock ( "Fury" , 50, 2.5 )
析构函数 就像new 之后用delete释放内存一样, ~Stock() 即为释放类内存的析构函数。
例如:
Stock::~Stock()
{
cout << "Bye" << enl ; // or nothing left here is fine.
}
13. this指针 top = stock1.topval(stock2); 其中 const Stock & topval ( const Stock & s) const; 显式访问对象s / stock2 隐式访问对象stock1 / 没有别名, 因此这里需要使用 this 指针 this -> total_val 例如
const Stock & Stock::topval ( const Stock & s ) const
{
if ( s.total_val > total_val ) // 这里的total_val即为隐式调用的Stock1
return s;
else
return *this; // 如要返回Stock本身,更改其值 Stock1咩有别名 使用this指针。
}
14. 函数重载/函数多态 定义多个名称相同但特征标不同的函数 比如一个大类 鸡 特征标 鸡a = 火鸡 鸡b = 公鸡...
未完待续....