类和对象(上)

本文章主要供自己复习已经学过的算法,并不适合小白进行学习。如果有刚学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.析构函数

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

相关推荐
SUNNY_SHUN2 分钟前
VLM走进农田:AgriChat覆盖3000+作物品类,607K农业视觉问答基准开源
论文阅读·人工智能·算法·开源
黎阳之光5 分钟前
视频孪生赋能车路云一体化,领跑智慧高速新征程
人工智能·算法·安全·数字孪生
Darkwanderor28 分钟前
高精度计算——基础模板整理
c++·算法·高精度计算
普马萨特42 分钟前
基站 / WiFi 粗略位置对 A-GNSS 的影响
网络·人工智能·算法
py有趣1 小时前
力扣热门100题之接雨水
算法·leetcode
mmz12071 小时前
深度优先搜索DFS(c++)
c++·算法·深度优先
汀、人工智能2 小时前
[特殊字符] 第103课:单词搜索II
数据结构·算法·均值算法·前缀树·trie·单词搜索ii
wanderist.3 小时前
算法模板-字符串
数据结构·算法·哈希算法
xiaoye-duck3 小时前
《算法题讲解指南:动态规划算法--子序列问题》--29.最长递增子序列的个数,30.最长数对链,31.最长定差子序列
c++·算法·动态规划
Yzzz-F3 小时前
Problem - 2180D - Codeforces
算法