1508-张晨曦总结《2016年-11月-12日》【连续22天总结】

时间:2022-03-14 14:31:51

标题:两种程序的设计思想

关键词:思想

内容

A. 一句话概括今日目标完成情况

a)9.6的学习 300% (一不小心就把9.7和9.8也给干了)

b)和王子昂同学深入交流一波(其实就是研读一下两天之前他对我关于结构体的帮助,是大半夜的晚上爬起来给我写的,这就让我很感动。然而由于时间的原因,直到今天才有时间拜读,说实话,我的内心并不是不惭愧的) 100%

B.具体内容

 (b)下面先贴出王子昂同学给我发的帮助吧:

_(:з」∠)_昨晚忘了 爬起来又翻了一遍视频 好像确实没有………………可我记得有一段视频顺口提了tm是系统提供的结构体啊orz  喔!想起来了,是数据库的视频里看到的囧 不好意思~
 年份+1900,月份+1的意思应该是存储着“与1900相差的年份数”和“与1月相差的月份数”,至于为啥day没有初值就不造了_(:з」∠)_
至于为什么是1900,二十世纪我是顺口提的啦。看到你总结里说了就去查了一下,倒是没有比较官方的结论,应该是因为早期(1970年左右)C语言诞生的时候,内存很小,所以空间十分紧张,于是为了减小占用空间,年份部分只用两位数来表示,于是初值直接设置为1900(unix的时间戳用的就是1970了)。顺便相关的还有千年虫问题,感兴趣的话你可以看看。
再顺便,对于私有成员的set和get函数,set写,get读呀。因为外部函数时不能直接读取类内私有成员的值的,所以要用get函数来作为媒介。它们也不是规定,只是需要用的时候才通常使用的一个方法。


看了之后我对这个1900   +1   和mday有了差不多的理解。话说这个 1900的设定是因为内存空间不足的原因突然感觉当年他们在造计算机的时候好萌(蠢)啊。年份部分只用两位数来表示。而get函数通常要来做外部函数来读取类内私有成员。而对于那个千年虫的问题我还没有仔细地阅读。(坦率地讲,这点也让我很惭愧。)


(a)程序设计思想的学习

这个东西呢,有两种(吧)。

一个是面向过程的程序设计(SP)。(例如什么,不知道)

一个是面向对象的程序设计(OOP)。(这个应该是例如C++,Java之类的语言吧)

前者是吧数据与函数分离,而后者则是将数据和函数当作一个统一体(采用润健对用来模拟客观世界中的实际对象)

面向对象的程序设计有四个特征:抽象、封装、继承(听群里这些人老在说继承继承,然而我学的太慢,一直都没有碰到)、多态性。(一个加号都说的那么牛逼哦~)

这个程序设计的优点也很多:效率高,可靠性高。共享,还可以团队开发(这个很猛啊我感觉)。

因为太多的变量,所以要引入数组,而(……太多了就不打了,理解了就行)

日期数据修改用init,显示用一系列print,获得用一系列get函数

下面就开始牛逼的东西了。如果我现在有一个日期类,有一个时间类,那么如果我想要一个日期时间类,我该如何做呢?虽然这个例子看起里很像最近很火的那个I have a pen, i have an apple,AHHHHHHHH~~~~,Apple Pen!

咳咳,还是严肃一点把。毕竟我是个程序员了。

首先肯定不能重新完整定义了,代码重复太可怕,浪费了人力资源

所以可以利用已存在的类定义日期时间类,这就是代码复用。这个东西就是继承性抽象描述实体的基本思路。(老师说会在第八章里面详细讲,也就是说我还有三小节的距离。哎……都怪我学的太慢,这就很惭愧 )

老师的那页PPT上也给出了两种定义方式的例子。代码一贴出来,高下立分。代码重复的方式洋洋洒洒地写了13行出来,而继承类定义只用了6行就完成了定义。(数据可能有点特殊化,但继承定义的优势还是很明显的)

而关于表达式多态性的设计思考要放在第九章详细介绍,这里就是简单得告诉了我假如说我有一个mydatetime ,还有一个yourdatetime,如果我把这两个东西相减做差,希望能得到这两个日期相隔的时间。这些东西都是有意义的。


 然而到现在为止我已经把9.6学习完了,我觉得不过瘾啊!

虽然已经一点多了但我还是毅然决然的决定把9.7也给搞了,开心最重要。(其实是今天被你们搞得热血沸腾)

9.7可鸣笛、运动和播放MP3的汽车类的定义,下面先把代码贴出来吧(毕竟敲了半天也是心血):

#include<iostream>
#include<cstring>
#include<windows.h>
#include<mmsystem.h>
using namespace std;
class automobile
{
private:
char type[20];
char color[20];
float price;
int carry_weight;
int carry_customer;
public:
void set_data(char *t,char *c,float pri,int cw,int cc);
void movecar(int l,int k);
void horming(int num);
void downcar(int l);
void play_mp3(char *ps);
char *show_type(){return type;}
};
void automobile::set_data(char *t,char *c,float pri,int cw,int cc)
{
strcpy(type,t);
strcpy(color,c);
price=pri;
carry_weight=cw;
carry_customer=cc;
}
void automobile::movecar(int l,int k)
{
cout<<"\n"<<type<<"水平直线运动:"<<endl;
for(int i=0;i<l;i++){
cout<<" "<<"o_o";
Sleep(1000/k);
cout<<"\b\b\b";
}
}
void automobile::downcar(int l)
{
cout<<"\n"<<type<<"垂直下降运动:"<<endl;
for(int i=0;i<l;i++){
cout<<"o_o";
Sleep(500);
cout<<"\b\b\b"<<" ";
cout<<endl;
}
}
void automobile::horming(int num)
{
for(int i=0;i<num;i++){
cout<<type;
cout<<'\007'<<" di..."<<endl;
Sleep(1000);
}
}
void automobile::play_mp3(char *ps)
{
char str[100]="play ";
strcat(str,ps);
cout<<str;
mciSendString(str,NULL,0,NULL); //照写就行了!
char a;
cin>>a;
}
int main()
{
automobile nison;
char tp[]="yyida";
char ys[]="white";
nison.set_data(tp,ys,200000,5,3);
nison.horming(5);
nison.movecar(10,3);
nison.downcar(8);
char mp[]="d:\\宋冬野 - 董小姐.flac";
nison.play_mp3(mp);
return 0;
}
哎,然而让我伤心的是……编译的时候报错了: E:\DEV C++\collect2.exe[Error] ld returned 1 exit status

我百度了半天说是拿C的编译器编译了C++的代码,但还是不太懂什么意思,我去CSDN里面找了几片帖子,但是没看懂他们在说什么,这就很伤心对吧。

这个老师讲车类定义的时候,里面画的那个

void automobile::movecar(int l,int k)
{
cout<<"\n"<<type<<"水平直线运动:"<<endl;
for(int i=0;i<l;i++){
cout<<" "<<"o_o";
Sleep(1000/k);
cout<<"\b\b\b";
}
}
他说这个o_o很简陋,我当时笑出声了,他很严肃啊看起来。不过这个车画的确实 挺简陋的。跟着老师把代码过了一遍,自己又独自写了一遍,不过苦于不能运行(没有error了,就是有一个ld有问题),所以只能从视频课程里看老师运行的结果了。这就很 悲惨。现在为止做了这么多类定义了,觉得其实类也挺简单的(哎呀我的天你可不知道我刚学类的时候有多崩溃,前面明明讲的class里面要定义private public protected三个,但现在基本不定义protected了,完后这个public里面的函数基本只是简单地声明,从来都是类外定义的!)。可能码多了有感觉了吧。

今天看到了谢志丹都在做机器人(虽然是第十周那个机器人类……)了!很是羡慕嫉妒(同时有些许的惭愧因为我记得我们之前有一天是进度相同的,然而由于我各种各样奇葩的原因以及无止境的复习现在已经落后整整一周了)。所以今晚学了两节,但是好像现在不是特别的瞌睡啊……

那就把9.8也学习了算了……反正也不困……

设计平面上的几何图形:圆

老师又讲了一遍oop的抽象,特征就是数据成员!功能和操作就是函数成员!(要不要这么亢奋……)

我们设计程序的目的是让计算机自动去求解问题(人类好懒哦)

如果在类定义的时候不写private,那么在碰到public和protected之前的定义都会默认定义为私有成员。

下面也把圆的代码贴出来把:

#include<iostream>
using namespace std;
class Point
{
private:
int x,y; //如不写private则默认为私有成员
public:
void InitPoint(int,int);
int GetX(){return x;}
int GetY(){return y;}
void print();
};
void Point::InitPoint(int a,int b)
{
x=a;
y=b;
}
void Point::print()
{
cout<<"["<<x<<","<<y<<"]";
}
class Circle
{
private:
double radius;
Point Center;
public:
void InitCircle(double,Point);
double GetRadius();
Point GetCenter();
double Area();
void Print();
};
void Circle::InitCircle(double r,Point p)
{
radius=(r>0?r:0); //有效性检验
Center=p;
}
double Circle::GetRadius()
{
return radius;
}
Point Circle::GetCenter()
{
return Center;
}
double Circle::Area()
{
return 3.14159*radius*radius;
}
void Circle::Print()
{
cout<<"Center=";
Center.print();
cout<<"; Radius="<<radius<<endl;
}
int main()
{
Point p,center;
p.InitPoint(30,50);
center.InitPoint(120,80);
Circle c;
c.InitCircle(10.0,center);
cout<<"Point p:";
p.print();
cout<<endl;
cout<<"Circle c:";
c.Print();
cout<<"The center of the circle c:";
c.GetCenter().print();
cout<<"\nThe area of circle c:"<<c.Area()<<endl;
cout<<endl;
cout<<"Thanks for using!";
return 0;
}

额……怎么说呢,感觉这个圆的定义也是挺简单的。只要把类的定义方法使用方法掌握清楚,感觉这一类问题都可以掌握的差不多了。只不过感觉这些东西(就是圆的元新坐标和半径)都是在主函数里头提前定义好的有些无趣,改天做一个自己定义的程序出来。(应该很简单)


不得不说,今天从姚总身上学到很多,感觉自己又年轻了几岁(之前我老感觉自己老了zzz)。买的戴尔 卡耐基的《人性的弱点》已经在路上了。(虽然不知道作为程序员为什么要去研究人性的弱点,但多学点东西总没有坏处)。组长告诉我学校发的C++课本还是要看的(然而我早就不知道丢到哪里去了,幸好今晚回宿舍在我下铺的莫名其妙的地方找到了),视频里讲的内容不全面(组长并没有看过,是从我的总结里看出来的,搞得我感觉有点对不起视频老师)。

哎,感觉这些15级的同学都要上天了,这些16级的同学也快爬到天上了。而我还在地上转悠,感觉很惭愧啊,要加速了。

明天中午又要出摊(我的天?),今天抽空把4篇英语作文写完了。(用的是杨立北的老套路,先把英文用百度翻译成中文,再把中文用谷歌翻译成英文,刘毅鹏告诉我的

睡一觉起来继续奋斗了。生命不止,折腾不息。

C.明日计划

 

我的邮箱:smartisandre@yeah.net

我的微博:http://weibo.com/smartisandre

我的博客:http://blog.csdn.net/andr3zzzz