持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第N天,点击查看活动详情
🌟5. 再次理解类和对象 现实生活中的实体计算机并不认识,计算机只认识二进制格式的数据。如果想要让计算机认识现实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写程序,创建对象后计算机才可以认识。比如想要让计算机认识洗衣机,就需要:
-
用户先要对现实中洗衣机实体进行抽象—即在人为思想层面对洗衣机进行认识,洗衣机有什么属性,有那些功能,即对洗衣机进行抽象认知的一个过程
-
经过1之后,在人的头脑中已经对洗衣机有了一个清醒的认识,只不过此时计算机还不清楚,想要让计算机识别人想象中的洗衣机,就需要人通过某种面相对象的语言(比如:C++、Java、Python等)将洗衣机用类来进行描述,并输入到计算机中
-
经过2之后,在计算机中就有了一个洗衣机类,但是洗衣机类只是站在计算机的角度对洗衣机对象进行描述的,通过洗衣机类,可以实例化出一个个具体的洗衣机对象,此时计算机才能洗衣机是什么东西。
-
用户就可以借助计算机中洗衣机对象,来模拟现实中的洗衣机实体了。
在类和对象阶段,大家一定要体会到,类是对某一类实体(对象)来进行描述的,描述该对象具有那些属性,那些方法,描述完成后就形成了一种新的自定义类型,才用该自定义类型就可以实例化具体的对象。
⭐️拓展:C++11的成员初始化新玩法 class A { public: A(int a = 0) : _a(0) {} private: int _a; }; class B { private: //缺省值 int _b = 0; int* p = (int*)malloc(sizeof(int)*10); A _aa = A(10);//先构造再拷贝构造,优化为构造 A _aa = 10;//同上,建议 //static int _n = 10;//err,静态变量不能给缺省值 }; int main() { B bb; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 C++11 支持非静态成员变量在声明时进行初始化赋值,但是要注意这里不是初始化,这里是给声明的成员变量缺省值 —— 如果在构造函数中显示给值就会不用缺省值,如果没有显示给,就会用缺省值
⭐️练习题 💫求1+2+3+…+n ✨练习原题
class Sum { public: Sum() { _ret += _i; _i++; } static int GetRet() { //在保证封装的情况下访问_ret return _ret; } private: static int _i; static int _ret; }; //定义 int Sum::_i = 1; int Sum::_ret = 0;
class Solution { public: int Sum_Solution(int n) { Sum a[n];//调用n次构造 return Sum::GetRet(); } };
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 💫计算日期到天数转换 ✨练习原题
核心思想:之前我们是把一年中每月的天数存储起来,这里我们存储的是包括当前月份之前的天数。对应的月份 + 天数就是当前默认的天数,再判断闰年。
#include using namespace std; int main() { //static int monthDays[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,30,31}; //改造: static int monthDays[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}; //2021 10 18 int year, month, day; cin >> year >> month >> day; int n = monthDays[month - 1] + day; //判断2月,注意这里不是等于而是大于 if (month > 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) { n++; } cout << n << endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 💫日期差值 ✨练习原题
题解:本题将日期差值分为三段计算
第一段是小年度过的时间 第二段是大年度过的时间 最后一段是,包括小年在内的,小年到大年之前的各年时间之和 3段-1段+2段+1即可 #include #include #include using namespace std;
static const int month[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; static const int year[2] = {365, 366};
int main() { }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 💫打印日期 ✨练习原题
用C++类的构造函数自动完成
27 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
一起去看日落吗 已关注
50
53
94
专栏目录 C++类和对象篇