Ref
cppreference - inline
cppreference - classes
类
类包含数据(变量)成员和函数成员,数据成员又分为静态数据、动态数据;函数成员分为静态函数非静态函数。
类实例
类实例可以叫做对象,类是抽象的描述描述一类事物的特征,实例是具体存在的某个类实体,如例:Dog是一个类,a是这个类的一个实例。
class Dog{
public:
Dog(int t,string n,string c):tail(t),name(n),color(c){}
int tail;
string name;
string color;
};
Dog a(18,"da huang","yellow");
数据
静态数据
被 static
修饰的数据成员是静态数据成员,属于类的属性,既可以通过类名访问如 A::st_var
,也可以通过类实例访问如 a.st_var
。存储在数据段,只有一份,可以看作全局变量。
非静态数据
非静态数据属于对象属性,只能通过对象来进行访问。与对象同在,是对象的一部分。
函数(方法)
静态函数成员
被 static
修饰的函数成员,是类的函数,通过类或者类实例都可以访问。存储在代码段。
非静态函数成员
只能通过对象来进行调用,存储在代码段。
默认函数
class Foo{
public:
int a;
int b;
}
类一般都要具有以下6个函数,如上例
- 构造函数
default_constructor
- 析构函数
destructor
- 拷贝构造函数
copy_constructor
- 拷贝赋值函数
copy_assignment
- 移动构造函数 C++11新
move_constructor
- 移动赋值函数 C++11新
move_assignment
调用时机
- 构造函数:显式定义类对象。
- 析构函数:生存期结束。
-
拷贝构造函数:使用类对象来构造/初始化对象;类对象参数传递;函数返回值为类对象时。如
A a(b); A a=b;
。 -
拷贝赋值函数:使用类对象赋值给对象。如
a=b;//a,b都已经存在
。 -
移动构造函数:使用右值引用构造/初始化对象。
A a(std::move(b));
-
移动赋值函数:使用右值引用赋值给对象。
a=std::move(b);
内联函数
inline
关键字修饰的函数。
inline
关键词的本意是作为给优化器的指示器,以指示优先采用函数的内联替换而非进行函数调用,即并不执行将控制转移到函数体内的函数调用 CPU 指令,而是代之以执行函数体的一份副本而无需生成调用。这会避免函数调用的开销(传递实参及返回结果),但它可能导致更大的可执行文件,因为函数体必须被复制多次。因为关键词 inline 的含义是非强制的,编译器拥有对任何未标记为 inline 的函数使用内联替换的自由,和对任何标记为 inline 的函数生成函数调用的自由。这些优化选择不改变上述关于多个定义和共享静态变量的规则。
网友评论