C++
类的成员变量
类的成员函数
成员函数是在类体中定义的。也可以在类体中只写成员函数的声明,而在类的外面进行函数定义
类体中直接定义函数时,不需要在函数名前面加上类名,因为函数属于哪一个类是不言而喻的
成员函数在类外定义时,必须在函数名前面加上类名,予以限定(qualifed),
" :: "是作用域限定符(field qualifier)或称作用域运算符,用它声明函数是属于哪个类的
函数后面加一个冒号表示函数的定义是在类的内部进行的,这种函数被称为类成员函数。
类成员函数可以访问类的私有成员和保护成员,也可以访问公有成员。
此外,类成员函数还可以被其他函数或类调用。
在类的定义中,类成员函数通常被声明在公有部分或私有部分
将const修饰的类成员函数称之为const成员函数;
const修饰类成员函数,(本质)实际上修饰该成员函数隐藏的this指针,表明在该成员函数中不能对类的任何成员进行修改
它可以被指定为private(私有的)、public (公用的)或protected(受保护的)。
权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)
static用于定义静态成员或静态变量
静态成员变量 静态成员函数
6个默认的成员函数
类的6个默认成员函数
1初始化和清理
1、构造函数
2、析构函数 .析构函数名是在类名前加上一个字符‘~’。
2、拷贝赋值
拷贝构造函数概念
运算符重载 赋值运算符重载
3、const成员
const修饰类的成员函数
取地址及const取地址操作符重载
在类体中定义的成员函数会自动成为内联函数 类体内部定义的函数默认就是内联函数。
希望将函数定义在类体外部,又希望它是内联函数,那么可以在定义函数时加 inline 关键字
其他函数
全局函数,即非成员函数的一般普通函数
调用
/对象调用成员函数
指针调用
引用调用
指针和引用
智能指针:shared_ptr 、unique_ptr、weak_ptr
强制类型转换 关键字:static_cast、dynamic_cast、reinterpret_cast和 const_cast
初始化列表
构造函数的初始化列表,以冒号开始,冒号后面依次列出需要赋值的成员变量和值。
么时候需要使用初始化列表?
(1)当有成员变量是 引用类型 时
必须初始化引用 即使在构造函数里面赋值也不行,此时必须使用初始化列表
(2)当有数据成员是 常量 时
必须初始化常量
(3)当父类的构造函数 有参数 时
没有合适的默认构造函数可用
(4)当成员变量所属类型的构造函数 有参数 时
初始化列表的初始化顺序是由数据成员的声明次序决定的,不是由初始化列表的排列次序决定的。
//初始化列表的方式
Test()
:m_ia(0),m_ib(1)
{
}
C++模板
c++ 有两种类型的模板
1:函数模板(function tempalte):使用泛型参数的函数(function with generic parameters)
2:类模板(class template):使用泛型参数的类(class with generic parameters)
template <typename T,std::size_t n = DefaultStackSize>
shared_ptr和unique_ptr在初始化
std::shared_ptr<Frame> f1(new Frame(), del1);
通过构造函数初始化
// shared_ptr<T> 类模板中,提供了多种实用的构造函数, 语法格式如下:
std::shared_ptr<T> 智能指针名字(创建堆内存);
template < class T, class Alloc = allocator<T> > class vector; // generic template
std::vector<int> first;