标题:兴奋之余,我们该做些什么?
关键词:析构函数的应用
内容
A. 一句话概括今日目标完成情况
(a)巩固10.4 100%
(b)学习10.5、10.6 50%(非常惭愧,只完成了一半的任务量。确实是眼睛都睁不开了)
B.具体内容
今天学习了10.5实际意义的析构函数,这个实例学的我是头昏脑胀。理解并且写完之后再一次发现编程之后找错误真是最痛苦又最幸福的事情。
因为很认真地对待这段机器人代码,今天就破个例把他贴上来吧
#include<iostream>
#include<cstring>
using namespace std;
class robot
{
private:
char name[20];
char type[20];
int num;
char *ps;
public:
robot()
{
strcpy(name,"XXXXXX");
strcpy(type,"XXXXXX");
num=0;
ps=new char(5);
strcpy(ps,"Zero");
}
void set(char n[],char t[],int m);
char *out(int a);
char *tran_int(int n);
void print_num();
~robot(){
cout<<"堆区中"<<strlen(ps)+1<<"个字节空间释放内存"<<endl;
delete[]ps;
};
};
static char *num1[]=
{
" ","one ","two ","three ","four ","five ","six ","seven ", "eight ","nine ","ten ","eleven ","twelve ","thirteen ", "fourteen ","fifteen ",
"sixteen ","seventeen ","eighteen ", "nineteen "
};
static char *num10[]=
{
" "," ","twenty ","thirty ","forty ","fifty ","sixty ","seventy ", "eighty ","ninety "
};
char *robot::out(int a)
{
char k[1000]=" ";
int b=a%100;
if(a/100!=0){
strcat(k,num1[a/100]);
strcat(k,"hundred ");
if(b!=0){
strcat(k,"and ");
}
}
if(b<20){
strcat(k,num1[b]);
}
else{
strcat(k,num10[b/10]);
if(b%10!=0){
strcat(k,"\b-");
strcat(k,num1[b%10]);
}
}
char *p=new char[strlen(k)+1];
strcpy(p,k);
return p;
}
char *robot::tran_int(int n)
{
char *p;
char kk[1000]=" ";
if(n>1999999999){
strcpy(kk,"dev C++平台无法处理太大的数字!\n");
}
else{
int a=n/1000000000;
int b=(n%1000000000)/1000000;
int c=(n%1000000)/1000;
int d=n%1000;
if(a!=0){
p=out(a);
strcpy(kk,p);
strcat(kk,"billion ");
delete[]p;
}
if(b!=0){
p=out(b);
strcat(kk,p);
strcat(kk,"million ");
delete[]p;
}
if(c!=0){
p=out(c);
strcat(kk,p);
strcat(kk,"thousand ");
delete[]p;
}
if(d!=0){
if(d<100&&(a!=0||b!=0||c!=0)){
strcat(kk,"and ");
}
p=out(d);
strcat(kk,p);
delete[]p;
}
}
p=new char[strlen(kk)+1];
strcpy(p,kk);
return p;
}
void robot::print_num()
{
cout<<"整数为:"<<num<<endl;
if(ps==NULL){
cout<<"zero"<<endl;
}
else{
cout<<ps<<endl;
}
}
void robot::set(char n[],char t[],int m)
{
strcpy(name,n);
strcpy(type,t);
if(num==m){
return;
}
else{
num=m;
delete[]ps;
}
if(num>0){
char *tp=tran_int(num);
ps=new char[strlen(tp)+1];
strcpy(ps,tp);
delete[]tp;
}
else if(num==0){
ps=new char[5];
strcpy(ps,"zero");
}
else{
ps=new char[13];
strcpy(ps,"负数不能翻译");
}
}
int main()
{
robot Andre;
Andre.print_num();
int n;
cout<<"请输入要翻译的数字n:"<<endl;
cin>>n;
Andre.set("Andre","1207#",n);
Andre.print_num();
cout<<endl;
cout<<"Thanks for using!";
return 0;
}
这算是使用析构函数的典型例子把。目前为止这个我写过最长的程序理解起来其实有点难度的(不和人家大神几千几万行的代码比)。来来回回写了三遍(原谅我的笨办法)。但是在翻译99以上的数字的时候就出现问题了?程序运行停止?是什么鬼?照着老师的改了半天还是不能用,很苦恼。
我发现这样看的话,其实特别直观简单。
这是框架。整个程序的框架,是他的骨头。感觉这样的方法很有效。现在每次写完长一点的代码,我总会这样合起来来看看。首先看看他的框架,然后再往框架里一点一点去充实他的血肉。
今天主要还是想讲讲这次会议。
一如既往的北式幽默(不免有点讲相声的嫌疑)。如何把大家的积极性调动起来?我相信这是一个需要每个领导者思考的问题。
思绪万千,想了很多却怎么也写不出来。
今天发生了太多事,心情很烦。
只有沉浸在代码中,才能忘却所有。C++是一个巨人的肩膀,站在上面可以看得更远。
大二了,认真点。
再不搞出点名堂了真的对不起自己了。
C.明日计划
10.5、10.6,加快进度。(听说60天以后要学习别的东西了,我C++才到第十周,还有两周多的课程没有看,周末两天准备疯狂刷课)