c++ 对象基础(一)

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个函数,如上例

  1. 构造函数 default_constructor
  2. 析构函数 destructor
  3. 拷贝构造函数 copy_constructor
  4. 拷贝赋值函数 copy_assignment
  5. 移动构造函数 C++11新 move_constructor
  6. 移动赋值函数 C++11新 move_assignment

调用时机

  1. 构造函数:显式定义类对象。
  2. 析构函数:生存期结束。
  3. 拷贝构造函数:使用类对象来构造/初始化对象;类对象参数传递;函数返回值为类对象时。如 A a(b); A a=b;
  4. 拷贝赋值函数:使用类对象赋值给对象。如 a=b;//a,b都已经存在
  5. 移动构造函数:使用右值引用构造/初始化对象。A a(std::move(b));
  6. 移动赋值函数:使用右值引用赋值给对象。a=std::move(b);

内联函数
inline 关键字修饰的函数。

inline 关键词的本意是作为给优化器的指示器,以指示优先采用函数的内联替换而非进行函数调用,即并不执行将控制转移到函数体内的函数调用 CPU 指令,而是代之以执行函数体的一份副本而无需生成调用。这会避免函数调用的开销(传递实参及返回结果),但它可能导致更大的可执行文件,因为函数体必须被复制多次。

因为关键词 inline 的含义是非强制的,编译器拥有对任何未标记为 inline 的函数使用内联替换的自由,和对任何标记为 inline 的函数生成函数调用的自由。这些优化选择不改变上述关于多个定义和共享静态变量的规则。

你可能感兴趣的:(c++ 对象基础(一))