C++头文件
传统C头文件
C++头文件
hpp文件
命名空间
C++ 引入了新的概念,命名空间可以有效避免大型项目的各种名称冲突
class关键字
class是c++的核心,是面向对象的编程的核心内容
更严格的类型转化
在c++,不同的指针是不能直接赋值的,必须强转
new 和delete
new 和delete是c++内建的操作符,不需要任何头文件,用new分配的内存必须用delete释放,不要用free
new 创建数组的方法new[]
内联函数
inline关键字的意思是,内敛函数不作为函数调用,而是直接把内联函数的代码嵌入到调用语句中
内联函数适合代码很少,并且频繁的大量调用
引用
引用就是一个变量的别名,而不是地址
函数的缺省参数
C++允许函数在定义的适合,提供缺省参数,如果调用函数的适合没有提供形参,那么形参就是缺省值
引用做为函数的参数,没有出栈,入栈的操作,所以效果更高
如果要使用引用参数的值不能再函数内部被修改,那么就定义为常量引用const &
函数重载
函数的名称是一样的,但参数不同可以重载
函数参数相同,但返回值不同,不可以重载
类和对象
C++类成员的保护
如果类函数返回的是成员变量的指针,为了避免在类外部成员变量被修改,所以函数就要返回常量指针
如果一个类成员变量和一个全局变量重名,那么在类成员函数当中默认访问的是类的成员 变量
在类的内部访问全局表示,关键字::
C++类的本质
类其实就是结构的数据成员加可执行代码,统一提供封装,继承,多态
在类内部,没有权限限定符,默认是private
在结构内部,没有权限限定符,默认是public
类的作用域
类成员变量的作用域局限于类内部,类外部是不可见的
类的构造和析构函数
构造函数名称和类的名称一致,而且没有返回值
一个类实例化为一个对象的适合,自动调用
一个对象在销毁的适合会自动调用析构函数
构造函数的初始化成员列表
初始化成员列表只能在构造函数使用
const成员必须用初始化成员列表赋值
引用数据成员必须用初始化成员列表赋值
原则
由于析构函数只有一个,所以在不同的构造函数里面给函数的成员指针分配内存的时候一定要统一new 或者new[]
拷贝构造函数
浅拷贝
两个对象之间成员变量简单赋值
深拷贝
不同的对象指针成员指向不同的内存地址,拷贝构造的时候不是简单的指针赋值,而是将内存拷贝过来
原则
如果类成员有指针,那么需要自己实现拷贝构造函数,不然存在浅拷贝的风险
常量类成员,常量对象
类成员后面跟关键字const意思是告诉编译器,这个函数内部不会对类成员变量做任何修改
函数的参数如果是一个类,那么就用类的引用,如果不想参数被调用函数内部修改,那么就采用const &
explicit
告诉c++编译器,要明确的调用这个构造函数,而不要自作聪明的认为=操作符是要调用构造的
类的static成员变量
static变量是放在静态内存区的,程序加载就存在,一直到程序推出才清理
类的static成员和类的对象没有直接关系,类的静态成员是放到静态内存的,程序开始执行就存在,一直到程序结束才清理
类的静态成员不论类的实例有多少,但成员变量只有一份
类的单例
.h
--------------------------------------------------------------------
class Single {
private:
static Single * p;
protected:
Single();
~Single();
public:
static Single * getInstance();
static void releaseInstance();
};
.cpp
------------------------------------------------------------------------
Single * Single::p = nullptr;
Single::Single() {
std::cout << "Single()" << std::endl;
}
Single::~Single() {
std::cout << "~Single()" << std::endl;
}
Single* Single::getInstance() {
if(p == nullptr) {
p = new Single();
}
return p;
}
void Single::releaseInstance() {
delete p;
}
main.cpp
----------------------------------------------------------------------------
int main() {
Single * b = Single::getInstance();
Single::getInstance();
Single::releaseInstance();
return 0;
}
.print
---------------------------------------------------
Single()
~Single()
makefile
gcc编译过程
gcc参数
-o 指定输出文件名
-c 只编译,不连接
-E 预编译
make是根据.cpp和.o文件的最后修改日期判断cpp文件是否编译,如果.o文件不存在,make会失去判断条件,那么一定会编译cpp文件
在unix下so文件一定要以lib开头,以so结尾
gcc参数-IPIC 生成和位置无关的代码
网友评论