【描述c++ 的编译过程】
.cpp ->编译器-> .s 汇编代码->汇编器->目标代码[.o]->连接器->可执行程序
其中,连接器的作用:链接库文件,链接其他目标文件。
【Terminology】
explicit C(int x);
explicit B(int x = 0, bool b = true);
// 可以阻止用来执行隐式类型的转换(implicit type conversation),任然可以显示转换。
copy 构造函数,“以同型对象初始化自我对象”, copy assignment 操作符号“从另一个同类型对象中拷贝值到自我对象中”
class Widget{
public:
Widget();// default 构造
Widget(const Widget & rhs);// copy 构造函数。
Widget & operater = (const Widget & rhs) ;
}
c++ 的特点: 多重范型编程语言,支持过程形式,面向对象,泛型编程,元编程形式,
面向对象: 构造函数,析构函数,封装(encapsulation)。继承,多态,virtual 函数(动态绑定)。
虚函数,在继承中,相当于只继承一个接口,函数的实体,要在derived class中定义。
允许在派生类重新定义与基类同名的函数,并且通过引用来访问基类和派生类中的同名函数。
函数的覆盖:基类和派生类同名,参数和返回值相同的时候,并且基类为虚函数,则派生类同名的override基类
多继承:一个类有多个基类:class Singer waiter:public waiter;public singer
多继承的问题:从两个基类继承到同名的函数,可能会先菱形继承。
常量指针,指针常量
const char *p =greeting; // const data
char const *p = greeting; // const data
char * const p = greeting; //const point
const char* const p = greating;
#include<iostream>
using namespace std;
int main(){
int a = 123;
//&a表示a在内存中的地址,也就是123在内存中的地址
cout<<"a: "<<a<<endl<<"a's address:"<<&a<<endl;
//此时p是一个指针,指向a所在的位置
int *p=&a;
out<<"p: "<<p<<endl;
//声明p之后,在p之前添加*表示p指向内存的值
cout<<"p's value: "<<*p<<endl;
//同时p也是 一个变量,在内存中也有一个地址储存它,但其地址不是a的地址
cout<<"p's address: "<<&p<<endl;
//试试*&组合使用是什么效果
cout<<"*&p: "<<*&p<<endl;
//&p是一个内存地址,*&p表示&p指向地址内存空间的值,在这里表示a的地址
cout<<"**&p: "<<**&p<<endl;
//刚才我们已经知道*&p是a的地址,那么**&p就表示a的值
}
int * p = null; //p 指向一个地址单元 p->内存地址单元,& p = 表示p的内存地址值, 改变& p,也就改变指针所指内容,相当于指针的指针。