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

类和对象(上)

本文章主要供自己复习已经学过的算法,并不适合小白进行学习。如果有刚学c++代码的小白请前往别处进行学习。

1.类的引入。

在c++中,存在这样一种数据类型。是多个数据类型的总和,其中可以包含变量也可以包含函数。这就是类的类型。以下是类类型的实现代码:

class a1{
public:
a1(int d1)
{_d1=d1;
}
private:
int _d1;
}

如图所示的d1就是c++的一个类,这个类包含了函数a1(构造函数后面会讲),私有类型_d1。如果在变量中加上private,那么在类外就无法直接访问到该变量。反之public是可以的。

2.类的this指针

class Date
{ 
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout <<_year<< "-" <<_month << "-"<< _day <<endl;}
}int main()
{Date d1, d2;d1.Init(2022,1,11);d2.Init(2022, 1, 12);d1.Print();d2.Print();return 0;
}

我们此时有如上图代码,先初始化类d1,d2.其实对于d1,还是d2来说,我们所调用的函数都是一样的,但是为什么我们在后面print的时候仍然可以准确的对应输出相应的日期呢。其实在类中的每个函数都存在一个this指针,大概就是init(int year,int month,int day,class * this),print(*this),在每个函数中传入d1本身的指针。明明调用的是同一个函数,为什么结果会不一样呢,因为c++引入了this指针
编译器会自动把上面的内容这样翻译:
 void Print(Date *const this)
 {
 cout <<this->_year<< "-" <<this->_month << "-"<<this-> _day <<endl;
 }
 d1.Print(&d1);
 d2.Print(&d2);
注意,是编译器可以这样翻译,我们只能理解,不能直接这样写。
形参和实参不能显示的使用this,只能在成员函数里面使用,比如上面cout的内容
就是合法的。

3.类的构造函数

在类中有一种函数,起到初始化类的作用,不用我们手动调用,创建时会自动调用。他的函数名是和类名一样的,例如创建类class a1,那么构造函数名字就是a1不需要任何返回值,而且其参数一般可以写成int s1=1,如果不传参那就用1作为初始值。

不写构造函数,编译器会自动给无参数的构造函数。即初始化为随机值。

4.拷贝构造函数

	s1(s1& x){_date = x._date;}

可以使用别的类型创造一样的对象。

5.析构函数

跟构造函数功能相反,一般类的销毁会使用。

http://www.xdnf.cn/news/4039.html

相关文章:

  • C语言 指针(5)
  • 两台电动缸同步算法
  • n8n 构建一个 ReAct AI Agent 示例
  • 数理性能大幅提升|暴雨一体机适配DeepSeek Prover v2
  • C++类_成员函数指针
  • 移动 Trae 目录到 E 盘 - 解决 C 盘空间不足问题
  • 在Qt Creator中使用CUDA
  • 录播课制作技术指南
  • Javase 基础加强 —— 03 集合
  • Room + WorkManager的Android学习总结
  • 2025年DA数智大会大模型与大数据应用实践峰会(脱敏)PPT合集(36份)
  • **面试水货程序员马小帅**
  • 技术部测试规范
  • PyTorch_张量拼接
  • ES6入门---第三单元 模块四:Set和WeakSet
  • SQL手工注入(DVWA)
  • 「Mac畅玩AIGC与多模态17」开发篇13 - 条件判断与分支跳转工作流示例
  • 交互式智能体面临长周期决策和随机环境反馈交互等挑战 以及解决办法
  • 记录一次手动更新英特尔Management Engine固件的经历
  • Python绘制误差棒:深入解析数据的不确定性
  • 文章记单词 | 第62篇(六级)
  • W-TinyLFU缓存驱逐算法解析
  • Maven框架详解:构建与依赖管理的利器
  • 《奇迹世界起源》:宝箱工坊介绍!
  • MyBatis 核心类详解与架构解析:从入门到源码级理解
  • 《前端秘籍:SCSS阴影效果全兼容指南》
  • Linux的系统周期化任务
  • ES类的索引轮换
  • JVM——JVM是怎么实现invokedynamic的?
  • HttpPrinter 是一款功能强大的跨平台 Web 打印解决方案