作者game0416 (凤狼)
看板NTUE-CS102
标题Re: [闲聊] 程设作业
时间Wed Mar 3 00:07:29 2010
好像半睡不睡第二次课了hmm
上次是动态宣告,这次是结构
下次好像是链结串列...(远目)
好啦,不管怎样还是下一页开始...
从动态宣告起,补一下上周内容QQ
--
动态宣告...就动态嘛(殴)
与一般静态相比,主要差别是动态是在程式执行中才取用记忆体使用
而静态宣告(
int a)则是在程式启动时从记忆体取得4bytes的记忆体这样
最主要功能是精简记忆体使用...在没记忆体能用时很重要(眯眼)
使用方式是利用一个指标去储存
new出来的记忆体位址
比如说,要动态宣告一个int变数
就要先形成一个int指标,再
new一段记忆体、将位址传给指标使用
如下面这一小段所示
: 这阵子修改排版习惯,看不习惯不好意思Q
#include<iostream>
using namespace std;
int main(){
int *p;
p =
new int;
delete p;
}
--
因为是动态宣告出来的,所以也能够自由释放掉这段记忆体空间
就如前页范例的
delete (记忆体位置)这般
要记得的事情是:使用动态宣告请一定要有释放掉的习惯这样
其他要注意...因为是个记忆体位址
所以不要做蠢事去覆盖掉位址记录就好
像是这样这段...就是个错误范例,第一次
new出来的东西就会再也找不到了Q
#include<iostream>
using namespace std;
int main(){
int *p;
p =
new int;
cout << *p <<'\n';
p =
new int;
cout << *p <<'\n';
delete p;
}
--
嗯,动态宣告大概就这样吧
顺便附一下上次小作业code当人生的纪录
#include<iostream>
using namespace std;
int main(){
int *p;
while (1)
p =
new int;
}
结果是会自己停止,然後有个windows的警告提示
这个警告用cmd跑才看的到这样...大概就是那个回报/不回报的cmd版本
: 一般int a[n];这种动态宣告在win 这个virtual不吃...
: 针对这点我是觉得无所谓啦...反正C99这个新规定都接受了,跟随时代嘛(殴)
此外,释放阵列则是
delete a[];
--
再来是今天不知不觉就说完的结构...
简易来说,结构就是可以把 一整套东西 包成 一个 包装
如此就能在宣告时比较容易去处理繁多而使用上互有关联的变数、处理行为
像是作业这个成绩单就是个例子...
一个人名对一份成绩,累积一多要分成好几个阵列宣告就是小小麻烦了点
因此,将针对一个人的所有变数包起来做为一个变数(?)去应用就能简化行为
繁杂一点的用法我自己以前没用过,所以大概就先这样说明...
反正上到哪里就怎样说明好了(死)
不管怎样,下一页开始是语法与code...
--
结构大概是
class跟
static两种,差别是前者预设属性是
private,後者是
public
以现在接触的范围来说
可以这样解释
public跟
private...
: 当然,这不是个很正确的思考逻辑
public是种全域变数,可以给结构本身以外的东西修改数值
而
private是区域变数,只能在结构里面被修改
算了,用文字说明总觉得很麻烦(想)
一边写今日作业一边说明
要求是有ID、有一项成绩就好,所以不想太多应该会写成
class stu{
int id;
int grade;
};
更完整点可能会想像下页这样写
--
#include<iostream>
using namespace std;
class stu{
int id;
int grade;
};
int main(){
stu studenta;
studenta.id =
36;
studenta.grade =
60;
}
像这样去试着指定成绩...可是编译会出现错误
因为
private "不能" 从结构以外的地方去读写
所以在这里要把id跟grade设为
public,才能够由外部使用...
习惯上是不会把变数设为
public,习惯上(飞)
--
也就是把结构的部份改成
class stu{
public:
int id;
int grade;
};
这样就能用上页的作法去使用类别了
嗯...原则上类别的阵列也能像一般宣告方法去做
stu stuedents[
38];
这样的宣告方式也是可接受的
不过老师不接受,所以就请往上看动态宣告的部份
用同样的方式去宣告就好
stu *p;
p =
new stu[
38];
--
最後就是作业题目了...不防雷了
反正这时候应该也都该生出来,前面也写完类别部份
剩下排序跟传值...前者泡排不会写真的该重修-___-
方便起见,不写阵列...大概说明一下怎样写就好
#include<iostream>
using namespace std;
class stu{
int id;
int grade;
};
int main(){
stu studenta,studentb;
studenta.id =
36;
studenta.grade =
60;
studentb.id =
40;
studentb.grade =
90;
}
(下页)
--
两个替换当然还是要有tmp做传递
stu tmp;
传值大概有两种
一种是
tmp.id = studenta.id;
tmp.grade = studenta.grade;
这种像过去程设的用法...可是既然是结构
就该用更精简的手段
tmp = studenta;
这样就能做传递了
所以说,如果只是要把上页a.b做交换
写法就是下页这样..
--
#include<iostream>
using namespace std;
class stu{
public:
int id;
int grade;
};
int main(){
stu studenta,studentb;
studenta.id =
36;
studenta.grade =
60;
studentb.id =
40;
studentb.grade =
90;
stu tmp;
tmp = studenta;
studenta = studentb;
studentb = tmp;
cout <<studenta.id <<'\t' <<studenta.grade <<'\n';
cout <<studentb.id <<'\t' <<studentb.grade <<'\n';
}
--
有够难看...硬塞一页就变得很恶心了
不好意思(飞走)
--
红白本命
○楽园の巫女
博丽 霊梦 职业:博丽神社の巫女さん
Hakurei Reimu 能力:主に空を飞ぶ程度の能力
@东方project系列
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.114.76.199
1F:推 j2612280:good!!但还是不得不宣传一下我的论坛XD~ 03/03 00:09
3F:→ game0416:(飞踢) 早上跟你提的我跟系办提了...下学期开始 03/03 00:10
4F:→ gcobc12632:大家一起重修 03/03 00:11
5F:→ j2612280:OK!!记得要再提醒我一下><我怕过一个暑假就忘了..感恩~ 03/03 00:12
6F:→ j2612280:啊= =对了..凤娘的是详细版 我的是手写简易版~ 03/03 00:13
7F:→ pk873:翔风DADA置入性行销 而且又想要跟凤狼开战了 03/03 00:14
8F:→ game0416:到时候应该会记得吧 是说有可能指名干三年就是了(炸) 03/03 00:14
9F:→ j2612280:pk不要乱引战~~~三年.....下学期再说吧~ 03/03 00:15
10F:→ game0416:没有问题,你把架构做出来我去坐领乾薪! 03/03 00:18
11F:→ j2612280:你想太多啦= =+ 03/03 00:19
12F:推 CaptainWill:推! 但二楼又在宣传非法论坛了 囧 03/03 00:21
13F:嘘 gcobc12632:广告推文 凼 03/03 00:26
14F:→ CaptainWill:支持楼上 03/03 00:27
15F:→ j2612280:靠= =请饶了我... 03/03 00:28
16F:推 ip3311:推 宣传非法论坛 干 你来我寝室开过你论坛? 03/03 00:38
17F:推 dosomethnig:楼上...哈哈哈 03/03 00:43
※ 编辑: game0416 来自: 120.127.47.86 (03/09 12:02)