当前位置: 首页 > news >正文

C++ 学习笔记(四)—— 类和对象

1、this指针
class Date
{
public:
    void Init(Date* this, int year, int month, int day)
    {
        this->_year = year;
        this->_month = month;
        this->_day = day;
        this->Print();
        //  这就是this指针,是编译器自己加的,是用来让成员函数找到成员变量的位置的;
        //  this在实参和形参位置不能显示写,但在类里面可以显示的用;
        cout << this << endl;
    }

    void Print()
    {
        cout << _year << endl;
    }

private:
    int _year;
    int _month;
    int _day;
};

小扩展:

1)this指针存在哪?(栈、堆、静态区、常亮区)

答:this是一个形参,一般是存在栈里面;有些编译器(如VS)会优化,直接用寄存器加载;

2、类的6个默认成员函数

如果一个类中什么成员都没有,简称为空类;

空类中真的什么都没有吗?其实并不是,任何类在什么都不写时,编译器也会自动生成6个默认成员函数;

默认成员函数的定义也就是用户没有显式实现,编译器会自动生成的成员函数;

六个默认成员函数:

  1. 初始化和清理:构造函数主要完成初始化的工作;析构函数主要完成清理工作;
  2. 拷贝复制:拷贝构造是使用同类对象初始化创建对象;赋值重载主要是把一个对象赋值给另一个对象;
  3. 取地址重载:主要是普通对象和const对象取地址,这两个很少会自己实现;

构造函数:

构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。

特征:1)函数名与类名相同;2)无返回值(void也不需要写);3)对象实例化时编译器自动调用对应的构造函数;4)构造函数可以重载(写多个构造函数,提供多个初始化方式);

class Date
{
public:
    Date()
    {
        _year = 1;
        _month = 1;
        _day = 1;
    }

    Date(int year, int month, int day)
    {
        _year = year;
        _month = month;
        _day = day;
    }

    //  将上述两个构造函数合并为一个全缺省构造函数,更为灵活;
    Date(int year = 1, int month = 1, int day = 1)
    {
        _year = year;
        _month = month;
        _day = day;
    }

    void Print()
    {
        cout << _year << "/" << _month << "/" << _day << endl;
    }

private:
    int _year;
    int _month;
    int _day;
}

int main()
{
    Date dd;  //  此处注意不能写成“Date dd()”,会识别成一个函数声明的;
    dd.Print();  //  咱们这里会发现dd已经被初始化为“1/1/1”了,如果没有构造函数,这里出来的会是随机值;
    Date dd2(2023, 01, 01);
    dd2.Print();  //  此处输出“2023/01/01”;
    return 0;
}

相关文章:

  • 【计算机操作系统】深入剖析操作系统中的存储器管理:从基础到高级
  • 如何高效参与 GitHub 知名项目开发并成为核心贡献者
  • Ubuntu Debian 系统下挂载 Samba 共享目录的完整指南
  • 用java写一个简易的本地聊天室
  • 使用vscode搭建pywebview集成vue项目示例
  • bonding技术
  • span与span之间的空白如何解决?
  • Shopify Checkout UI Extensions
  • 电阻的阻值识别
  • 数据结构5(初):排序
  • 【跟着灵神刷力扣】定长滑动窗口
  • 【动态规划】相关复习
  • python数据增强和转换
  • linux 设置tomcat开机自启动
  • 面试常问系列(一)-神经网络参数初始化
  • 大模型量化框架GPTQModel的基本使用方法
  • 【yolo】yolo训练报错,以及解决方案
  • Linux 线程概念
  • 2025.03.21首板涨停股票分析
  • nt!KeWaitForMultipleObjects函数分析之一个例子ExpWorkerThreadBalanceManager
  • 政企共同发力:多地密集部署外贸企业抢抓90天政策窗口期
  • 牛市早报|持续推进城市更新行动意见印发,证监会强化上市公司募资监管
  • 中央宣传部、全国妇联联合发布2025年“最美家庭”
  • 马上评|安排见义勇为学生补考,善意与善意的双向奔赴
  • 外交部:反对美方人士发表不负责任谬论
  • 筑牢安全防线、提升应急避难能力水平,5项国家标准发布