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

标题:9.9的实例讲解

关键词:错综复杂

内容

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

a)出摊 100%

b)9.9的学习 100%

B.具体内容

 今天看9.9这个面目狰狞的老师讲了学生类信息录入的定义,醍醐灌顶啊感觉,长见识了。

先贴出第一版的代码把(为什么是第一版呢?因为他说后面会有更牛逼的了)

#include<iostream>
#include<cstring>
using namespace std;
//设置信息函数Set_info
class Info
{
	private:                 //我还是喜欢把private打出来 
		int Id;
	    char Name[20];
	    int Programming;
	    int Network;
	    int Database;
	    int Total;
	public:
            void Set_info(int id,char *name,int programming,int network,int database);
	    int Get_Pro();
	    int Get_Net();
	    int Get_Dat();
	    int Get_Tol();
	    void Show();
};
void Info::Set_info(int id,char *name,int programming,int network,int database)
{
	Id=id;
	strcpy(Name,name);
	Programming=programming;
	Network=network;
	Database=database;
	Total=programming+network+database;
} 
int Info::Get_Pro()
{
	return Programming;
}
int Info::Get_Net()
{
	return Network;
}
int Info::Get_Dat()
{
	return Database;
}
int Info::Get_Tol()
{
	return Total;
}
//显示信息函数Show 
void Info::Show()
{
	cout<<Id<<'\t';
	cout<<Name<<'\t';
	cout<<Programming<<'\t';
	cout<<Network<<'\t';
	cout<<Database<<'\t';
	cout<<Total<<endl;
}
int main()
{
	const int COUNT=5;
	int i=0,j=0;
	int id;
	char name[20];
	int programming;
	int network;
	int database;
	Info student[COUNT],tmp;
	cout<<"请输入学生成绩的信息:"<<endl;
	cout<<"学号 姓名 程序设计 计算机网络 数据库"<<endl;
	for(i=0;i<COUNT;i++){
		cin>>id>>name>>programming>>network>>database;
		student[i].Set_info(id,name,programming,network,database);
	}
	cout<<"学号 姓名 程序设计 计算机网络 数据库 总分"<<endl;
	for(i=0;i<COUNT;i++){
		student[i].Show();
	} 
	cout<<endl;
	cout<<"Thanks for using!";
	return 0;
}
坦率地讲,这个老师还是有点意思的,刚开始就在那边恐吓我说这种复杂类的代码写起来一般都比较长,动不动就上一百行了(呵呵),然后这并没有什么卵用,吓不倒我这个正经的程序员。所以他说啊,他这个课都是分开两节讲的,怕我听不懂,理解不了(呵呵)。定义这个类的时候啊,尽量把所有的成员函数都定义成私有的,这样对于程序运行的 安全性是有保障的,应该通过public里面定义的那些函数来对成员内容进行修改(间接修改),而不是在主程序里面直接修改。(这时程序的安全性会受到一定程度的威胁)

(为什么他们老师写类定义的时候都喜欢省略private,我觉得如果是为了简洁那是没必要的啊,可能是强迫症吧,如果没有东西和下面的public对齐我可是会崩溃的)好了,这第一个学生信息类简易版并不是重点,重点在后面

而在第二个课件里面,老师讲的代码风格问题,我觉得也是个重点:C++里通常用纯大写字母来表示常量或者宏(经常听说,感觉很牛逼。惭愧的是,还没学到那里),而用纯的小写字母来表示变量。这虽然只是习惯问题, 但遵守的话有助于养成良好的代码风格,这对以后的团队协作开发是有很大的帮助的。

贴出2.0版本的代码,感觉也不怎么难啊……

#include<iostream>
#include<cstring>
using namespace std;
//设置信息函数Set_info
class Info
{
	private:                 //我还是喜欢把private打出来 
		int Id;
	    char Name[20];
	    int Programming;
	    int Network;
	    int Database;
	    int Total;
	public:
		void Set_info(int id,char *name,int programming,int network,int database);
	    int Get_Pro();
	    int Get_Net();
	    int Get_Dat();
	    int Get_Tol();
	    void Show();
};
void Info::Set_info(int id,char *name,int programming,int network,int database)
{
	Id=id;
	strcpy(Name,name);
	Programming=programming;
	Network=network;
	Database=database;
	Total=programming+network+database;
} 
int Info::Get_Pro()
{
	return Programming;
}
int Info::Get_Net()
{
	return Network;
}
int Info::Get_Dat()
{
	return Database;
}
int Info::Get_Tol()
{
	return Total;
}
//显示信息函数Show 
void Info::Show()
{
	cout<<Id<<'\t';
	cout<<Name<<'\t';
	cout<<Programming<<'\t';
	cout<<Network<<'\t';
	cout<<Database<<'\t';
	cout<<Total<<endl;
}
int main()
{
	const int MAX_COUNT=100;
	int count;
	int i=0,j=0;
	int id;
	char name[20];
	int programming;
	int network;
	int database;
	Info student[MAX_COUNT],tmp;
	cout<<"请输入学生人数:";
	cin>>count;
	while(count>MAX_COUNT){
		cout<<"学生人数不能超过"<<MAX_COUNT<<"人,请重新输入:";
		cin>>count;
	}
	cout<<"请输入学生成绩的信息:"<<endl;
	cout<<"学号 姓名 程序设计 计算机网络 数据库"<<endl;
	for(i=0;i<count;i++){
		cin>>id>>name>>programming>>network>>database;
		student[i].Set_info(id,name,programming,network,database);
	}
	cout<<"按总分高低排名如下:"<<endl;
	for(i=0;i<count;i++){
		for(j=count-1;j>i;j=j-1){
			if(student[j].Get_Tol()>student[j-1].Get_Tol()){
				tmp=student[j];
				student[j]=student[j-1];
				student[j-1]=tmp;
			}
		}
	}
	cout<<"学号 姓名 程序设计 计算机网络 数据库 总分"<<endl;
	for(i=0;i<count;i++){
		student[i].Show();
	} 
	cout<<"每门课程成绩都大于85分的学生名单:"<<endl;
	cout<<"学号 姓名 程序设计 计算机网络 数据库 总分"<<endl;
	for(i=0;i<count;i++){
		if(student[i].Get_Pro()>85&&student[i].Get_Net()>85&&student[i].Get_Dat()>85){
			student[i].Show();
		}
	}
	cout<<endl;
	cout<<"Thanks for using!";
	return 0;
}
在定义学生人数上限MAX_COUNT时,用const定义的话太占据内存了,所以根据老师的话可以用 动态定义数组,这样可以节省内存空间,修改代码如下(int *p;我在上面定义了,没有贴出来)
Info student[MAX_COUNT],tmp;
	cout<<"请输入学生人数:";
	cin>>count;
	p=new int[count];
	while(count>MAX_COUNT){
		cout<<"学生人数不能超过"<<MAX_COUNT<<"人,请重新输入:";
		cin>>count;
		p=new int[count];
	}

至于delete p;的操作我放在最后面的return 0;上面了,程序可以运行,应该是没问题的吧。

        delete p;
	cout<<endl;
	cout<<"Thanks for using!";
	return 0;
这个学生类到这里基本上我就差不多了。开始第十章好了。

构造函数的定义:

OOP的封装嘛,再写一遍以加深记忆吧,就是将数据成员与函数成员集成封装在类体中,核心是将实体设计成“统一体”去进行各种处理。

我们一般都把数据函数设置为私有化成员,外界是不能直接访问的,所有我们要在弄一个成员函数,用来设置数据成员,该函数可以在需要时调用从而达到用户随时修改数据成员的目的。而数据成员值的读出必须要通过相关成员函数。这是类的共性。

对象初始化实质上就是对所有数据成员赋值。有一个成员的值不确定,该对象的值就都不完整。构造函数的函数名必须与类名相同,且没有返回值。由系统在声明对象时自动调用。

下面是使用了构造函数的源程序(关于日期类的)

#include<iostream>
using namespace std;
class Date
{
	private:
		int year,month,day;
	public:
		Date(int y=1900,int m=1,int d=1)     //名字相同,这就是构造函数 
		{
			year=y;
			month=m;
			day=d;
		}
		void init(int,int,int);
		void print_ymd();
		void print_mdy();
};
void Date::init(int yy,int mm,int dd)     //有效性检验 
{
	month=(mm>=1&&mm<=12)?mm:1;
	year=(yy>=1900&yy<=9999)?yy:1900;
	day=(dd>=1&&dd<=31)?dd:1;
}
void Date::print_ymd()
{
	cout<<year<<"-"<<month<<"-"<<day<<endl;
} 
void Date::print_mdy()
{
	cout<<month<<"-"<<day<<"-"<<year<<endl;
}
int main()
{
	Date date1;              //创建一个日期类对象,并初始化 
	cout<<"输出对象date1的数据成员值:"<<endl;
	date1.print_ymd();       //显示初始化数据的情况
	system("pause"); 
	date1.init(2006,3,28);   //修改数据成员 
	date1.print_ymd();       //显示修改数据的情况
	system("pause"); 
	Date date2(2013,11,26);  //再创建一个日期类对象,并初始化 
	cout<<"输出对象date2的数据成员值:"<<endl;
	date2.print_mdy();
	system("pause");
	date2.init(2006,13,38);
	date2.print_ymd();
	cout<<endl;
	cout<<"Thanks for using!"; 
	return 0;
} 
额……怎么说呢。构造函数这一节,构造函数的函数名就是类名,不用起别的名字或者区分大小写了。视频教材里的东西写的可以了。在主程序里因为是系统自动调用的缘故也蛮简单的。

明天又是周一。神烦周一啊现在……上一天课。明天要去医务室找老头结账。想想都痛苦。


C.明日计划

 时间仓促,完成前面的复习和10.2的学习就可以了把


我的邮箱:smartisandre@yeah.net

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值