NTUE-CS102 板


LINE

首先我要更正一下上次最後一页的code 没注意到用指标动态宣告时要用->,那整页都是.当成员存取运算子 非常抱歉<(_ _)> 今天的内容是 封装、链结串列 然後因为我中间好像不小心睡掉一段说明 所以我不知道王老大用了些什麽说明hmm 一样是尽量写简单看看Orz 这边提醒一下,作业内容如作业1的意思应该是 作业1 建立类别(阵列) -> 输入资料 -> 排序 -> 输出 变成作业3 建立类别(链结串列) -> 输入资料 -> 输出 -- 封装这部份上次第七第八页大概提过一点用法 最主要是说,变数不由类别之外直接存取 原始用意是避免设计上的疏失、容易debug两点为多 : 嗯...讲是这样讲,不过也有 : 「会写错的人就是会错,不会写错的人就是不会写错」by 强者我朋友 这样的说法hmm 回顾一下上周写的 类别有分publicprivate两部份 前者就像是全域变数,在任何一个有宣告该类别的函式都可以修改 後者就像区域变数,只能在类别之内修改 简单写一小段code比较 class C{ public: int a; private: int b; }; -- 如果我们宣告了一个C test; 并且试着编译以下两行程式码 test.a=5; test.b=6; 编译器将不会通过,并告知b是private : 警告讯息如右: 'int C::b' is private 这就是不能从类别外部直接改变的意思 所以我们要在类别宣告函式,藉由函式去改变类别内的数值 以上面的范例做修改,应该就是写成这样 class C{ public: void setb(int B) {b=B}; private: int b; }; -- 函式内使用类别,要修改类别C里头,b的内容时 就改成这样写 C.setb(6); 像这样,以类别里面的函式setb()去设定类别中int b的内容 就是将变数"封装"在类别中,不让外面的人可以直接碰 : 突然有种哪家精品店的感觉...「架上商品请勿触碰,如有需要请洽柜台人员」(?) 感觉很像当初在讲函式怎麽用一样,会有种多此一举的感觉 不过类别这种东西一多还是会乱,保守还是请用函式修改这样 这边顺便提一下,宣告类别内的函式一行可以像范例那样缩在一起就算了 如果不是只有一行,那最好是像下页这样写在类别之外会好一些 凑 个 字 在 这 里 比 较 好 看 -- class aclass{ public: void seta_and_couta(int A); private: int a; }; // 此之上是类别,此之下是叙述类别内函式内容 void C::seta_and_couta (intA){ a=A; cout <<a; } int main(){ int a; aclass ex; cin >>a; ex.seta_and_couta(a); } 完整写一串大概是长这样子,顺便附上前面说明中的完整范例一套於下页QQ -- class aclass{ public: int a; void setb(int B) {b=B;}; int getb() {return b;}; private: int b; }; int main(){ aclass test; test.a=5; test.setb(6); cout <<test.a <<' '<<test.getb(); } 这边可以回忆一下我最後这个cout是怎麽做到的 再来链结串列会用到。 -- 被我忘记的作业二... 要写成封装,所以多加两个函式小改就好 因为前面说明很多了,只写一部份Q 总之就是拿函式去动变数 class aclass{ public: void setid(int ID) {b=ID;}; int getid() {return id;}; private: int id; }; int main(){ aclass students[10]; for (int i=0;i<10;i++){ int id; cin >> id; students[i].setid(id); } for (int i=0;i<10;i++) cout <<students[i].getid() <<endl; } -- hmm 封装这样讲好像很乱,不过好像也只能这样讲Orz 概念性质东西很讨厌是要知道当事人问题在哪 所以概括性的说明不容易解释 有问题真的请多问QQ 再来是意味不明的链结串列 : 欸,资结不是二年级的课吗... 这边要再提醒一下作业内容不用排序 可以少思考很多很多东西(远目) 链结串列(linked list) 近似於一种铁链式的方法去把数个独立的物件(铁环)接串在一起 在思绪中如同一串链子的构造.... : 他妈的谁看的懂上面这两句! 以我自己的理解观来说 我会把链结串列想成是火车那样的关系 车厢是物件,连结器是指标 -- 大概会像是 ███ ←这是车厢 _↙这东西是连结器 ███__███__███__███__███__ 藉由一个连结器,让我可以从第一节车厢,移动到第二节车厢这样 以此做出两个物件之间的"关系" : 概念上是这样...在记忆体位址上有点虫洞的感觉 嗯...我是code派,有点概念就硬凹code出来 或是看完code就能搞懂构造,所以我在这之後就直接code说明了Orz 要做出连结的构造,使用的是指标去指向下一节车厢的位址 然後呢,这个部份要内嵌在车厢里面的一部分 下页这段class会有比较完整的说明 然後一边去做这次的作业内容 -- 先假设我们只要输入id就好,一次要求多了我怕太花版面 所以我们先建立一个能输出入id的类别内容 class aclass{ public: void setid(int ID) {id=ID;}; int getid() {return id;}; private: int id; }; 在这之後,加入指标部分的输出入 class aclass{ public: void setid(int ID) {id=ID;}; int getid() {return id;}; void setptr(aclass *PTR) {ptr=PTR;}; aclass* getptr(){return ptr;}; private: int id; aclass *ptr; }; -- 请特别注意那个* 因为我们要回传的是一个指标,而不是物件 所以那个*绝对不能遗漏了,不然後面会出问题的 写完类别的构造...再来进入main里头去实做、宣告类别开始运作 这里我会写成正常的伫列...把先宣告的视为头去运作 而不是像老师的范例写成视为尾端(堆叠) : 伫列与堆叠就是先进先出与先进後出...详细以後再谈,不然就拿这两个名词去google 首先,使用动态宣告去产生一个物件 然後,用"两个"指标去储存这第一个物件的位址 一个用来当在车厢间穿梭的"人",一个用来记录第一个车厢的位置 就像这里这两行一样的宣告 int main(){ aclass *node,*head; //node当人,head当第一节车厢 head = node = new aclass; } -- 再来,再加入输入与创造的部份 这里我选择在输入完之後,同时创造下一个链结的位址 并让人走到下一间车厢 int main(){ aclass *node,*head; //node当人,head当第一节车厢 head = node = new aclass; for (int i=0;i<10;i++){ int id; cin >>id; node->setid(id); if (i!=9){ node->setptr(new aclass); node = node->getptr(); } else { delete node->getptr(); node->setptr(NULL); } } } -- 其中 node->setptr(new aclass); node = node->setptr(new aclass); 两行,是制造下一节车厢(下一个物件),并且将这一个位址放在这节车厢的指标上引导 至於那个if,只是单纯我没想到好方法 所以用土法炼钢的方法写遇到最後一个的时候怎样处理.. 就只是砍掉多生出来的那个,然後把NULL塞进去指标当串列结尾 写到这边应该是串列形成、输入资料过程写完 再来只要输出就好 : 我会建议自己重写一份形成、输入分开的,多练习是好事QQ 输出部分,首先要把node归零,回到第一节车厢,再逐个输出内容.. 所以开头第一句是 node = head -- 先来写个输出,因为有串列第一项,与最末尾的记号,因此使用whlie会好一点 输出应该不是问题 node = head; while (1){ cout <<node->getid <<endl; } 问题来自於往下走要怎麽写...还有思维有没有乱(殴) node = head; while (1){ cout <<node->getid() <<endl; if (node->getptr() != NULL) node = node->getptr(); else break; } 这里就是只要分辨是不是最末项就ok了 输出应该不是太大的问题hmm -- 最後,出於习惯,还是要记得delete掉生出来的东西 node = head; while (1){ if (node->getptr() != NULL){ aclass *tmp=node; node = node->getptr(); delete tmp; } else{ delete node; break; } } -- ...整个内容大概是这样吧 这次在发文前有记得编一次,应该没有太大的bug(死) 有问题多问看看,比较能找到方法去解释问题(倒) 另外,根据惯用的写法,就算是class内建private属性 还是会逐行由public开始定义,然後是private、protected -- 本命 ○楽园の巫女  博丽 霊梦 职业:博丽神社の巫女さん  Hakurei Reimu   能力:主に空を飞ぶ程度の能力 @东方project系列 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.114.76.199
1F:推 dosomethnig:头推 03/10 00:06
2F:推 Arashinoon:肩推 03/10 00:07
※ 编辑: game0416 来自: 58.114.76.199 (03/10 00:16)
3F:推 CaptainWill:屌推 03/10 00:07
4F:推 godhand0629:穴推 03/10 00:09
5F:推 j2612280:推他x的= =链结明明就是大二的课= = 03/10 00:11
6F:推 Tuko: 弓推 03/10 00:11
7F:推 CaptainWill:囧 03/10 00:11
8F:推 godhand0629:老师交太简单就说人家笑话 太难就说大二的客 安邦不是 03/10 00:12
9F:→ godhand0629:我要讲你... 03/10 00:12
10F:推 joe989879:用力推.....推倒__ 03/10 00:13
11F:推 j2612280:靠= =服部...你自己说..明天你要死几次!!!! 03/10 00:14
12F:推 pig456654:= = 安邦 不要欺负人0.0 03/10 00:14
13F:→ pig456654:难道你只有肉吗? 03/10 00:15
14F:推 Arashinoon:安邦什麽人你们还不知道 我就不多说了 凤狼大必推 03/10 00:15
15F:推 pk873:这学期就靠你了 (误) 03/10 00:26
16F:嘘 dosomethnig:纯嘘安邦无能 当公关没联谊! 楼下帮我推回来 03/10 00:27
17F:推 Arashinoon:我帮你 03/10 00:28
18F:→ j2612280:靠= =峻毅狗!! 03/10 00:34
19F:推 CaptainWill:你看看阿干做得多好 03/10 00:35
20F:推 t60702:推- - 03/15 20:41







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP