首先:C++是所有编程语言中最难的
属性:面向对象的编程思想
不能像C一样编写操作系统(比C语言差30%)
万物皆对象(C语言中:万物皆变量)
变量:一段内存空间
1、类库:MFC、STL、QT、OpenCV、OpenGL
在ubuntu 下安装C++编译器:sudo apt-get install build-essential、
2、编译:g++ -o hello hello.cpp
3、运行:./hello
C++中的关键字
auto:自动类型推导 auto关键字不能定义函数形参
auto fn(int n)->void
register:寄存器变量
extern:声明外部变量
static:静态变量、静态函数、静态成员变量、静态成员函数
const :C(只读变量)C++(常量)
const int *p; 修饰的是p指针,指向的int是常量
然而p 的值可修改。
const int * const p; 修饰的是p指针,指向的int也是常量
const int *p = &a; 修饰的是p指针,指向的int是常量
const int a = 10; 修饰的是a变量,a是常量
const int constantValue = 3;
const int* p = &constantValue;
static_cast<int>(a); // 静态转换
dynamic_cast<int*>(p); //通常指针转换
const_cast<int*>(p);
reinterpret_cast<int*>(p);
1.内联函数:inline定义在头文件中的函数,编译器会自动内联,减少函数调用的开销
2.形参存在默认值:实参可以不传递参数
add(int a = 0, int b = 0);
cout << add(10) << endl;
add (int a, int b = 0, int c = 0);
3.引用传参
void add(int &a, int &b);
引用是某个变量的别名。
引用和指针的区别:
1、引用不占空间,指针占8字节。
2、引用必须初始化,指针不用初始化
3、引用一旦绑定,就不能再绑定其它变量。而指针可以拆解。
4、函数重载:
允许函数同名,但不同参数类型。(个数和类型)
编译器会选择和调用参数匹配的函数。
返回值不同,编译器会报错。
int add(int a, int b);
int add(int a, int b, int c);
类与对象
数据类型和变量的关系:抽象和具体的关系1、抽象:将 1、类:
2、对象:
面向对象的基本特点:复杂的问题用简单的模型来表达
2、封装:封装就是把一些数据(属性)和操作(方法)封装在一起,对外隐藏一些实现细节,只对外提供一些接口。
将属性和方法有机结合,形成"类"。数据和函数都是类的成员。
3、继承:继承就是子类可以继承父类的属性和方法,同时还可以添加自己新的属性和方法。
4、多态:多态就是指同一个操作符可以有不同的含义,在不同的场景下有不同的含义。
包含性多态!!!
//示例:
class Clock
{
public:
void showTime()
{
cout << hour << ":" << minute << ":"<< second << endl;
}
void setTime(int h, int m, int s);
{
hour = h;
minute = m;
second = s;
}
int hour;
int minute;
int second;
};
int main(void)
{
Clock c;
c.setTime(10, 20, 30);
c.showTime();
}
访问权限关键字:
public:公众的
private:私有的
protected:保护的
类外:类的使用者使用的代码
类内:类的设计者使用的代码
类外:类的使用者使用的代码
类中的函数存放在代码区,所以sizeof(complex)= 4
编译器对变量存储时的对齐方式:
VC++:4字节对齐 以Ubuntu18.04版本为例
GCC:以最大的字节对齐