美文网首页
c++ 对象基础(一)

c++ 对象基础(一)

作者: Hubhub | 来源:发表于2020-03-23 23:22 被阅读0次

    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++ 对象基础(一)

          本文链接:https://www.haomeiwen.com/subject/gkqwyhtx.html