2、内联函数、引用变量、函数重载
内联函数 为什么使用内联函数? 减少上下文切换,加快程序运行速度。 是对C语言中的宏函数的改进。 语法 #include<iostream>using namespace std;inline double square(double x){ return x*x;}int main(){ cout<<square(2.2)<<endl;} 其实就是在函数声明或者定义前加上关键字inline。 引用变量 为什么要使用引用变量 主要用途是用作函数的形参。通过引用变量做参数,函数将使用原始数据,而不是其副本。 高效。 语法 引用实际上就是定义一个别名。看看下面代码: #include<iostream>using namespace std;int main(){ int a=50; int &b=a;//定义并初始化,这里b是a的引用。 ...
3、从源码到可执行文件
简析 一般来说,C++程序会分为 头文件和源代码文件。 C++鼓励我们将组件函数放在单独的文件中,这就意味着会存在多个源代码文件,C++鼓励我们对这些源代码文件单独编译,然后将这些文件的编译版本链接。 单独编译后在链接的意义在于:如果我们要对一个源文件修改,我们就可以只对这个源文件编译,然后和其他文件的编译版本链接。 比如下面这个程序,有一个有文件coordin.h,两个源代码文件 file1.cpp和file2.cpp coordin.h #ifndef a#define astruct polar{ double distance; double angle;};struct rect{ double x; double y;};polar rect_to_polar(rect xypos);void show_polar(polar...
4、内存模型
C++11使用4种方案来存储数据,这4种方案的区别主要是数据保留在内存的时间,即4种存储持续性(duration) 自动存储 静态存储 线程存储 动态存储 作用域(scope):描述了名称在文件的多大范围内可见 链接性(linkage): 描述了名称在不同文件种的共享的方式 外部链接性 内部链接性 无链接性 自动存储(局部变量) 自动存储的变量是最简单的,就是在代码段中int a=1类似的这种变量,也可以使用关键词register来显式表示他是自动存储的变量,register int...
5、名称空间
背景 声明区域(declaration region):可以进行声明的区域。 全局变量的声明区是整个文件,函数内声明的变量的声明区是代码块。 潜在作用域(potential scope):声明位置开始到声明区截止。 作用域(scope):变量对程序的可见范围。 变量的作用域是潜在作用域的子集。 例如,在函数中声明的局部变量会隐藏同名的全局变量,导致全局变量的作用域缺少一部分。 名称空间(namespace):每个声明区都可以声明名称,并且这些名称独立于其他声明区的名称。(例如:一个函数中的局部变量不会和另一个函数的局部变量发生冲突。)所以说,每个声明区就是一个名称空间。 C++允许我们自己创造名称空间。为了统一概念,我们不再把代码块当成名称空间,所以名称空间只有两种:全局名称空间 用户创造的名称空间 名称空间 我们创造两个名称空间Jack和Jill int Hill;namespace Jack{ double pail; void fetch(); int pal; struct...
6、对象和类(上)
...
6、对象和类(下)
this指针 到目前为止,每个类成员函数只涉及一个对象,即调用它的对象。但是我们有时候需要涉及多个对象,在这种情况下,必须使用this指针。 例如,我们要求一个函数实现比较两个股票的总价值,并选出大的那个股票。 那么这个成员函数的原型肯定是: const Stock & topval(const Stock &s)const; 首先这肯定是const成员函数,其次它的肯定要接收一个Stock对象,返回值也必须是一个Stock对象。 那么,调用这个成员函数时, top=stock1.topval(stock2)和top=stock2.topval(stock1)是等价的。 下面我们来看看函数如何定义? const Stock & Stock::topval(const Stock& s)const{ if(s.total_val>total_val) { return s; } else return...