今天的活相对有点麻烦,先重新学了个东西叫枚举(只有一丢丢的印象),然后捞一捞构造函数析构函数那一堆,捞不完每天continue了(流汗黄豆)。
讲真,唯一一点对枚举的印象还停留在当时电赛飞控程序里面一个类里面的enum number,后面没怎么影响整个程序(纯把里面定义的字母理解成switch-case语句里面的case number去用去了) ,先看个enum的例子吧:
#include<iostream>
using namespace std;class player
{
public:enum number :int //不能用浮点数如float,只能是整数{a = 0, b = 1, c = 2};
};class play
{
public:enum number :int {a = 3, b = 4, c = 5};
};class p
{
public:void a(){cout << "hello world!";}
};int main()
{player p1;play p2;p p3;if (p1.a == 0){cout << "hello world!" <<endl;}if (p2.a == 3){cout << "hello world!" << endl;}p3.a();return 0;
}
//最后输出:3个hello world!
hello world最后也是顺利print出来了,注意的一点是它的语法有一丢丢小奇怪,然后他的类型只能是整型,而不能是浮点数,另外,如果enum在class中,千万不要撞名啦,不能再在同一类中定义同名的变量或函数,但在不同类中则可再用a;讲了这么多...是不是感觉enum很没用,I 目前来看,它能让代码更美观,它可能还有其他高端的用法,或者瓜同学现在等级太低,体会不到它这样用的好处,以后再深究!
吧啦完了enum,咱们开始构造函数(甚至还不包括拷贝与复制构造函数)与析构函数(下定决心把继承和虚函数放在下次了,希望下次的自己看到这里不要打自己QAQ),start!
首先,构造函数是你创造了一个类后自己就会生成的,但你看不到,它有点像一个函数,并且和类同名,你可以在里面写一些东西...Ok, 这些都是咱们已经知道的东西,接下来,咱们再来回忆(玩)一下它:
#include<iostream>
using namespace std;class play//在构造函数中初始化的类
{
public:int x;int y;play(){x = 0;y = 0;}void print(){cout << x << " " << y << endl;}
};class play2//未在构造函数中初始化的类
{
public:int x;int y;void init(){x = 0; y = 0;}void print(){cout << x << " " << y << endl;}
};int main()
{play p1;play2 p2;p1.print();p2.print();p2.init();p2.print();return 0;
}
例子中的x,y是没有初始化的,在play类中我们直接在构造函数中更改,相当于在每个成员诞生之初就给他附加了初始化的属性,而在play2中则每次都要添加新成员都要调用init去初始化差点忘了,下面是这个例子的输出:
0 0 //play类的
-858993460 -858993460 //play2类的没有初始化时报的未知数
0 0 //play2类init后输出才回复正常
此外,构造函数还有类似重载函数的功能,咱们也回顾一下,呐,例子如下:
#include<iostream>
using namespace std;class play
{
public:int x = 0;int y = 0;play(){}play(int X,int Y){x = X;y = Y;}
};int main()
{int a = 2, b = 2;play p1(2,2);cout << p1.x << " " << p1.y;return 0;
}
最后输出是两个2,是修改成功了滴!
emmm,构造函数差不多到这里了,后面的复制和拷贝还得喝几壶,接下来是构造函数的女朋友析构函数,构造函数“做了饭”,析构函数会狠狠地“把饭吃得干干净净”(奇怪的比喻)。较为准确来说,析构函数通常是设置变量以及做需要的初始化,而析构函数则是删除变量等东西,并清理使用过的内存(这是大家都知道的,尽管已经啰嗦完了,但还是要说一句不多啰嗦了),析构函数还同时适用于堆、栈分的对象,(印象里面new、delete那篇讲动态内存的blog里面讲过:动态内存初理解_不能摆烂烂的博客-CSDN博客)其实析构函数暂时没有太多好讲的,因为在直接用析构会显得很诡异,它在main结束时会自动调用,倒是更多是在析构函数中写点东西来看代码进程:
#include<iostream>
using namespace std;class play
{
public:play() {cout << "已构造" << endl;}~play() {cout << "已析构" << endl;}
};int main()
{play p;p.~play();return 0;
}
最后输出:
已构造
已析构 //p.play()输出的
已析构
可以看出哪怕是自己提前析构了一次,结束时还是会自己再次析构,所以手动析构好奇怪啊,自己再析构也是为了彻底断绝内存泄漏(计算机可比瓜同学聪明多了QAQ)。
emmm,今天活比较少,勉勉强强做完力,太美好了,还是希望能够坚持。
本文发布于:2024-01-28 23:34:42,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170645608711104.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |