开发者社区> 贺利坚> 正文

C++程序设计课程师生互动(2012年春第13周)

简介: 【本周感言——一点牢骚】   一些同学的状态还没有恢复。实际上,状态好的仍然保持,状态差的有持续下滑的趋势。结合期中测验的结果,如果有些同学还不改善状态,我真不看好了。近期的时间比春假前要松一些了,但完成的任务却少了。一直处于“赶上来”阶段的同学,每周的任务不去全部完成,跟不住,谈何赶上来。不少同学已经有了属于自己的电脑,是否用于学习,自己知道。反倒是,编程很疯狂的几位,依赖的仅是公共机
+关注继续查看

【本周感言——一点牢骚】

  一些同学的状态还没有恢复。实际上,状态好的仍然保持,状态差的有持续下滑的趋势。结合期中测验的结果,如果有些同学还不改善状态,我真不看好了。近期的时间比春假前要松一些了,但完成的任务却少了。一直处于“赶上来”阶段的同学,每周的任务不去全部完成,跟不住,谈何赶上来。不少同学已经有了属于自己的电脑,是否用于学习,自己知道。反倒是,编程很疯狂的几位,依赖的仅是公共机房。

  某天,下课后,几位同学站在路口,商量去哪。有一位提议:“去烟大市场吧。” 我知道了,那个地方有何吸引人的场所。


【本周重复最多的一条留言:天下的老鼠都叫Jerry吗?】

  其实对于这些同学,天下的猫还都叫Tom,……因为,形如 void Mouse::cry() const {cout<<"我叫Jerry,是一只老鼠,我的叫声是:吱吱吱!"<<endl;}的定义,使定义的name数据成员全然失去了其意义。出题时,main()函数中再放进来一只老鼠或许就好了,但这不是办法,同学们的思维得往上靠呀,不能只图着main()函数示例的输出是那么个样子就完事。


【本周意想不到了养眼图片】我给CaoYang同学留言:你真能想得出——黑框框的艺术照。




【形象理解】

  • 抽象积累(基类)就像大将军,扛枪打仗的事交给士兵们,留给自己的只有作战框架。。。
  • 抽象类中的纯虚函数就像是一个空瓶子,在派生类中给它装什么就是什么;【空瓶子——好比喻。】
  • 多态性是“一个接口,多种方法”。就像一个四合院有一个大门,但是有多户人家,过着各家的生活!抽象类是派生类的“老爸”!
  • 抽象类就像个母亲,只要子类需要就提供方便。用指向基类的指针访问成员函数时,一定记得定义对象,在这个地方出错可倒霉。。。【有人还说:抽象类是派生类的“老爸”!】
  • Vehicle类为纯虚函数,纯虚函数没有函数体,不能实例化,所以用对象引用时会出错。(人家是老大,不能给你单独开小灶。。。)
  • 虚函数方便了指针对派生类的访问,多态性是指一个函数可以有不同的功能,抽象类就像是一个原件,为了派生类定义方便提供一个原件。
  • 对于抽象类与多态性的应用,老鼠,猫,狗,长颈鹿是 动物的 衍生。
  • 尽管“形状”没有具体的面积,但他当上了圆、矩形的头。【好玩的感悟。】
  • 仅仅是一点对于抽象类与多态性的应用,没有难度,但可以加深理解,其实抽象啊,在动物界,抽象类是动物物种,说起动物你只是一个泛泛的名词,并不特指某一种,而实际的每一种动物又属于动物的衍生,因此很好的抽象。
  • 抽象类可以把它看成是我们建房子时候的设计图,通过这些设计图,工人去实现房屋的建造。抽象类有时看似可有可无,但是也正是这些抽象类,给我们编写的每一个类都赋予了他们现实的意义,为他们之间建立了关系,总的来说就是让这些类看起来更像个对象。【有一腚道理。】
  • 通过这几个任务,我对抽象基类函数的理解,抽象基类函数不作为实类只是作为一个纽带把它的派生类连接起来使用。
  • 好一个抽象基类呀!!
  • 【累的功能是能休息了。——学生写了错别字。】
【专业知识总结】
  •  void Mouse:: cry() const {cout<<"我叫Jerry,是一只老鼠,我的叫声是:吱吱吱!"<<endl;}【天下的老鼠都叫Jerry吗?】
  • Mouse::Mouse(string name)  {this->name = name; }【数据成员是基类的,派生类的构造函数调用基类的更佳。】
  • 老师这些地方 virtual double area()  const = 0;   有必要都加上const  吗???有神吗 意义呢?【const 和纯虚函数无关,其作用是函数内不能更改成员的值,见前面的内容。】
  • 虚函数的出现,解决了无法通过基类指针去调用派生类对象中的成员函数的限制,这种功能市非常实用的。
  • 最近做任务老是先把函数在类里面定义好···等完成程序运行无错后在将函数转到类外定义···貌似之前有的程序未在类外定义啊···
  • 将公有数据在父类中定义减少了子类代码,增加了代码的复用; 将父类定义为纯虚基类,将其作为一个接口凡是其子类都必须具备此功能, 并复用。 【总结中已经是透出了Java的味道。】
  • 抽象基类一定不要忘了使用const,而且const每一步都要紧随其后!【const不是必须!关键有=0即可。】
  • 抽象基类不必要定义对象也不能定义对象!派生类的构造函数要细心想一想,有门道哟!
  • 虚函数实际上是扩充了函数的功能,通过虚函数和指针的配合,可以方便的调用类族中的函数。
  • 看其他同学的博文,发现用this 指针,才想起在上技术课时,老师要求我们以后 定义成员函数的时候,用this 指针。Mouse(string name){this->name = name;}  就不用再重新定义一个变量名了,时间久了就不知道 i 、n 代表啥了。
  • 1.当一个函数被声明称虚函数时,其派生类中的同名函数都变成虚函数;2.虚函数只能用于类的继承层次结构中;
  • 派生类是不能访问基类的私有成员的,要用protected, 不能用private。【老革命的老问题。】
  • 纯虚函数是不能被调用的,包含纯虚函数的类无法建立对象。虚函数定义在基类中,其作用是允许在它的派生类中重新定义同名函数,在类外访问时可以通过指向基类的指针去访问派生类中的同名函数。
  • 虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
  • 使用基类指针来控制有关对象,不管对象在继承层次的那一层,都可以用基类指针指向它。
  • (1)纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对他进行定义。如果在基类中没有保留函数名,则无法实现多态性。(2)因为纯虚函数是不能被调用的,所以包含纯虚函数的类是无法建立对象的。(3)虽然抽象类不能定义对象(或者说抽象类不能实例化),但是可以定义指向抽象类数据的指针变量。如Animal *pt;
  • 如果在抽象类所派生出的新类中对基类的所有纯虚数进行了定义,那么这些函数就被赋予了功能,可以被调用.
  • 在定义基类时就把保护数据成员name定义了,在派生类中就不用再重新定义,可直接访问...
  • 虚函数解决了在同一个类中定义两个名字相同,参数个数和类型相同的函数的问题。【要强调同一“类族”中】
  • 将自己做的和老师的一比才知道,自己在定义变量时用的符号有问题,自己能看懂,别人就不一定看懂,如h和height.
  • 感觉有虚函数倒是挺好的 ,只要有命令,同名函数就会做出不同的反应,比分别定义各自的函数效率提高了很多。。。
  • 利用虚函数可以实现和重载函数同样的功能,但是这二者的实现方式是完全不同的,重载函数是在函数返回值类型或者形参的类型个数存在不同的,而用虚函数用完全相同的函数体首部的,可以通过不同对象的指针调用该函数!  
  • 抽象类是没有被具体化的类,它不能定义对象但是可以定义只想抽象类数据的指针变量!抽象类是在后来的派生类中被具体化的!
  • 既然Animal不需要实例化,完全可以将Animal定义为纯虚函数,这样就可以了,以后的派生类也可以单独定义并引用重名的函数了
  • 将抽象类Animal数据成员被各个派生类使用的时候,要把此数据成员定义为public型的,只有定义为public型的,派生类才能访问此数据成员。。。。。【protected用来干什么用呢?】
  • 通过1和2的比较,我发现使用虚函数可以通过指向基类的的指针灵活的访问派生类中的同名成员函数。(这条的专业性是参考了一下雷同学的,我自己的表达不是很清楚)【设法表达清楚。能用术语讲,是又一个层次。到时候了……】
【学习心得】
  • 有了之前那几个任务做铺垫~最后这个也没有什么障碍~完成的挺顺利~
  • 一开始不理解,忘记写上 const , 结果老出错误···后来好不容易发现···就又觉得自己好傻了···
  • 做这个程序时没有遇到什么鸭梨···用尹鹏学长的一句话“好HAPPY哦~”呵呵···
  • 一开始不太理解虚函数···做完这个任务时有点头绪了呢~【这就是学习过程。】
  • 将程序分解你会感到程序并不太难!而且会很好玩!一级一级的写下去!
  • 通过前边3个函数的对比,对纯虚函数有了更深的了解。【习惯对比,这是学习的基本手段。】
  • 这个程序由基类派生出3个类,在完成时每个类时测试一下,这样可以事半功倍。【是否可称为积木式开发?】
  • 在编写有多个类构成的程序时,最好实现好一个类就测试一下它的正确与否。【有人与你有同感。】
  • 很快完成了任务,真好!!要是每次都这样多好  
  • 虽然这个任务是照着老师的做的,但是我想这也是一种进步,确实也学到了不少东西,还是要学会举一反三的!加油吧!!
  • 这周的题思路很清晰。比较容易完成。
  • 自己做出来的就是爽啊。一定要理解课本上的概念,不要死记,灵活运用。【知识永远是鲜活的,只是有人将其学死了。】
  • 头疼的抽象类啊。。【抽象类不头疼,你想疼就疼,攻克了,就永不疼了。】
  • 这应该就属于“趁热打铁,现学现卖”了吧!!我感觉今天这节课听得还可以,就上机尝试了一下,任务一做的很顺利,任务二在定义构造函数的时候出了点问题,致使编译通不过。。。。哎,课下还得继续读课本,分析代码,不能学了后面忘了前面啊,得做到深刻理解。。。。。
【徐同学专栏】
  • 从实验1.1到实验1.2最后到实验1.3,老师真的是良苦用心啊,从实验1.1指向基类的指针无法访问到派生类的数据一步一步让我们体会虚函数的作用:虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类的指针或引用来访问基类和派生类中的同名函数,最后到纯虚函数,为派生类保留一个函数的名字,以便派生类根据需要对它进行定义。【学会我的这种设计,当你学习新东西时,如果内容太多或太抽象,这是逐步深入的办法。】
  • 实验的第一问还是挺简单的,在老师给的代码的基础上,主要是根据主函数,添加代码就可以了,单纯的虚函数罢了,看好课本相关章节,这个问题真的挺简单的,第二个实验是在第一问的基础上进行改造,将基类改为抽象类,也只是进行略微的修改,注意在派生类里面对纯虚函数进行再定义就是了,其他照搬问题一就好了,至于实验三,看来老师真的是很有心思,还刻意在实验中想方设法的给我们机会回顾以前的知识,只需根据要求,在基函数中增加数据成员,在派生类中继承就可以了,这也是以前做过的问题,看就看你能不能想到喽!
  • 感觉还好吧!应该说好像并不难,相比之下,怎么似乎还没有前两个问题花费的时间长,因为,只考察了单一的抽象函数,没有涉及其他的什么新知识,要说有点陌生的,也就是定义的基类指针数组和最后的求和吧,当然说陌生有的是因为没怎么见过或者是用过,但是老师给出来了,也是一看就懂的动心,有的是因为好久没用的缘故,想想也就行了,真的,挺简单的问题都是。
  • 嗯~整体代码和实验三十分的类似,大体的思路也和实验三有异曲同工之感,编写上,也感觉像是在写实验三的翻版,只是,唯一的不同就在于最后的输出上,略有不同,其他的嘛~真的,没什么区别了吧,也是再考察抽象类,也是单一的抽象类,当然啊,换句话说,实验三会做了,实验四应该也不是问题吧,也是比较简单的题目,也花不了多少时间就可以搞定!

【齐同学的理解】
  • 这个结果和我之前预测的一样,对于虚函数的理解我有自己的看法:那就是我和你不一样,你可以套用我的,还可以增加你的,而我不变我就是我!这个和老贺说的拿东西原理一样。
    而多态性:书上说是面向对象程序设计的一个重要特征。这个可以设计和实现易于扩展的系统。这好比每个人有每个人得责任,这里还有一个主管,每个人都要做好自己的责任,完成主管分配的任务,比较系统化。
    抽象类:不用来定义对象而只作为一种基本类型用作继承的类,又叫抽象基类,而他的作用就是提供公共接口,他是一个类族的共同基类,或者说为一个类族提供公共接口,作用都很大啊!【真正的自己的话。】
  • 这三个小程序却涵盖了三个内容,(1)设计相关的类:将基类派生类结合复习,派生类继承基类的内容,形式等,(2)设计基类为抽象类,此时程序中基类必须含有一个纯虚函数,才能构成抽象类,因此设计了:virtual void cry() const =0;(3)要节省时间资源,将基类中数据成员能被每一个派生类使用因此设计:
    protected:  
            string name;
    构造函数:Animal(string n):name(n){} 
    而派生类中则应声明:
    动物名称+(string n):Animal(n){},此时减少了每个派生类中都要声明的数据成员的必要····
  • 事实证明有条理的来,都可以做得到,将程序大化小,逐步求精:(1)先设计出基类CSolid,并且是抽象类,其中包含的成员函数是表面积和体积,不包含数据成员,接着是设计派生类,共三个,先将类设计出,然后三个立方体的表面积体积根据公式,利用数据成员求出,实现类即定义类,三个逐个实现后在进行main函数,其中要求:定义基类指针p(CSolid *p),在前面程序中已涉及过此方法,因此写出main函数,实现整个类的过程·····【水平嘛,说来就来了……】
【老贺语录】
  • 这周才提交1个,太小气了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《算法设计编程实验:大学程序设计课程与竞赛训练教材》——导读
全书以知识单元为基本构件,各单元既保持循序渐进的顺序又相对独立,既可拆卸重组、各取所需,又可在此基础上推广或创新,便于各学校按照不同的层次要求组织教学和培训活动。
771 0
课程设计,文件加密
小提示,密码文件需要自己先创建一个txt文件自己输入6个字符密码,路径与代码的运行路径在一起。。。 /*题目:文件加密 文件的传输会有明文和密文的区别,明文发送时不安全的,用一个程序实现发送文件的加密和解密操作。
854 0
全端工程师和设计师必读文章推荐【系列三十一】
  《Web 前端开发精华文章推荐》自2011年6月20号发布第一期以来,历经三年半,总共发布了30期。今天这篇是2014年第10期(总第31期),希望你能在这里发现有用的资料。   梦想天空博客关注前端开发技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 和 CSS3 技术应用,推荐优秀的 网页设计 案例,共享精美的设计素材和优秀的 Web 开发工具,希望这些精心整理的前端技术文章能够帮助到您。
1992 0
《计算机网络课程设计(第2版)》——1.2节计算机网络课程的实验教学与课程设计的关系
本节书摘来自华章社区《计算机网络课程设计(第2版)》一书中的第1章,第1.2节计算机网络课程的实验教学与课程设计的关系,作者:吴功宜 吴 英 ,更多章节内容可以访问云栖社区“华章社区”公众号查看
1349 0
《计算机网络课程设计(第2版)》——1.3节计算机网络课程的知识点
本节书摘来自华章社区《计算机网络课程设计(第2版)》一书中的第1章,第1.3节计算机网络课程的知识点,作者:吴功宜 吴 英 ,更多章节内容可以访问云栖社区“华章社区”公众号查看
1463 0
C++程序设计课程师生互动(2012年春第7周)
【关于友元函数】 friend函数使两个“人”之间的关系更加密切。。。 通过这个题目让我学会了友元函数与成员函数以及外部普通函数的区别, 但是友元函数也要谨慎使用。 慎交友。 两个好朋友也不是无限制的,一般不定义友元类,而只是定义几个友元函数,避免产生混乱 论亲缘关系的远近,成员函数》友元函数》一般函数【精辟!】 友元函数太好了,不是成员函数却可以随便访问别人的家,但是也不是无拘无
1258 0
《算法设计编程实验:大学程序设计课程与竞赛训练教材》——3.3 积性函数的实验范例
本节书摘来自华章计算机《算法设计编程实验:大学程序设计课程与竞赛训练教材》一书中的第3章,第3.3节,作者:吴永辉,王建德著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1257 0
【课堂笔记】C++程序设计- 第一章-绪论
2.对象的基本特点有: 对象唯一性。 每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。 分类性。 分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。
754 0
C++程序设计课程师生互动(2012年春第9周)
  今天看完同学博客比较早,看空间的动态,同学们还在继续上传。从中午开始,不断地有同学上线,赶在19:00之前传完。今天看得比较粗,很多没有写总结的,我数个数也就过去了;对留了言的,由感而发对上两句;有人提出疑问是必定要解答的,甚至代码中的问题可能还需要我调试一下才能发言。   在拳场上,我们有个规矩:当徒弟的,该怎么练就怎么练,时候到了,师傅自然就会指点。徒弟要主动练,要主动接近师傅。
952 0
+关注
贺利坚
烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
1965
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载