美文网首页
右值引用、五大函数、静态成员、友元函数

右值引用、五大函数、静态成员、友元函数

作者: wjundong | 来源:发表于2020-01-07 11:49 被阅读0次

右值引用

参考这篇知乎文章

五大函数

#include <iostream>

#define p(s) std::cout << s << std::endl

class shape {
public:
    shape()                             {                 }
    ~shape()                            {  p("析构函数");  }
    shape(const shape &rhs)             {  p("拷贝构造");  }
    shape(shape &&rhs)                  {  p("移动构造");  }
    shape &operator=(const shape &rhs)  {  p("拷贝赋值");  }
    shape &operator=(shape &&rhs)       {  p("移动赋值");  }
};


int main()
{
    shape a;

    // 拷贝构造,等价于 shape b(a); 或 shape b = shape(a);
    shape b = a; 
    shape c = std::move(a); // 移动构造
    b = c;                  // 拷贝赋值
    b = std::move(c);       // 移动赋值 
    std::cout << std::endl;
    
    // 先拷贝构造然后移动赋值最后将旧的 b 析构
    b = shape(c);           

    std::cout << std::endl;
}

输出结果

拷贝构造
移动构造
拷贝赋值
移动赋值

拷贝构造
移动赋值
析构函数

析构函数
析构函数
析构函数

静态成员

  • 静态成员是整个类共有的,所有类的对象都可以访问
  • 静态成员需在类外定义和初始化,无法在类内定义和初始化
  • 静态成员类加载时就定义,不需要创建对象
  • 静态成员函数只能访问静态成员变量,非静态成员函数可以访问静态成员变量
#include <iostream>

class shape 
{
private:
    // 声明私有静态成员
    static int sValue;

public:
    static int pubsValue;
    // 对象的成员函数,可访问静态成员
    inline void setValue(int val) { sValue = val; }
    inline int getValue() { return sValue; }
};

// 在外部定义静态成员并初始化
int shape::sValue = 0;
int shape::pubsValue = 0;


int main()
{
    shape shap;
    shap.setValue(12);

    // 公开的静态成员可以通过对象或类名直接访问
    shap.pubsValue = 20;
    shape::pubsValue = 223;

    std::cout << shape::pubsValue << std::endl;
}

友元函数

#include <iostream>

// shape 类前声明类 rect
class rect;

class shape {
public:
    // 被 rect 标记为友元的函数
    void printShape(rect rect);
};

class rect {
private:
    int mValue;
public:
    rect(int val)  { mValue = val; }
    // 友元函数,允许该函数访问自己私有变量
    friend void shape::printShape(rect rect);
};

// 函数定义需在 rect 类定义后
void shape::printShape(rect rect)
{
    std::cout << rect.mValue << std::endl; 
}


int main()
{
    shape shap;
    rect rect(24);

    shap.printShape(rect);
}

相关文章

  • 右值引用、五大函数、静态成员、友元函数

    右值引用 参考这篇知乎文章 五大函数 输出结果 静态成员 静态成员是整个类共有的,所有类的对象都可以访问 静态成员...

  • c++语法2

    接上篇我们继续学习静态成员、友元函数、继承、多重继承,继承访问权限等 静态成员与友元函数:c++中静态成员与jav...

  • 不可以被声明为虚函数的函数

    不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。 1、顶层函数:多态...

  • 第三章 类与对象应用

    学习目的 掌握静态数据成员及静态成员函数的使用; 掌握友元函数的使用; 掌握常成员函数的应用; 掌握对象成员的使用...

  • 虚函数

    常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。 1.为什么...

  • 王道程序员求职宝典(十)函数,栈与队列

    函数 参数传递值传递指针传递引用传递指针引用*& 内联函数成员函数内联普通函数内联宏定义 默认参数从右向左设定默认...

  • 第六章:静态成员与友元

    静态成员变量 这里面要回顾一下构造函数和析构函数?自己理解不是太深刻啊 友元:声明函数 友元:声明类 友元:声明类...

  • 10-C++远征之模板篇-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

  • 慕课网-C++远征之模板篇(上)-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

  • C++入门10 -- 友元,内部类,运算符重载

    友元 友元包含友元函数和友元类; 若将函数A(非成员函数)声明为类C的友元函数,那么函数A就能直接访问类C对象的所...

网友评论

      本文标题:右值引用、五大函数、静态成员、友元函数

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