面向对象的C++语言关键概念教学探索与实践

来源 :知识力量·教育理论与教学研究 | 被引量 : 0次 | 上传用户:liyunfei369
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  [摘要]C++语言是一门面向对象的高级语言,与C语言相比出现了很多新的概念,正确理解与应用这些新的概念是学好C++语言的关键。本文对引用与指针的概念以及使用方法的区别进行了详细的描述,还对普通指针、指向常量的指针和常指针三种指针所指向的内容和指针本身能否改变进行了对比,对基类中具有不同访问属性的成员经过不同方式继承之后在派生类中的访问权限也进行了比较,对不同重载方式下运算符重载函数参数的个数也进行了总结。通过对这些概念的理解和应用,可以提高大学生初学者和程序员的学习与编程能力。本文作者的教学实践表明,本文的关键概念教学实践起到了良好的教学效果。
  [关键字]面向对象 C++语言 关键概念 教学探索
  [中图分类号]G434 [文献标识码]A
  一、引言
  C++语言是在C语言基础上发展的一门面向对象的高级程序设计语言,全面兼容C语言[1]。C++语言采用面向对象的思想,将客观事物看作是具有属性和行为的对象,能够更为直接地描述客观世界中存在的对象以及它们之间的关系[2~3]。目前C++语言是大多数电子、信息、计算机等相关专业中非常重要的程序设计课程,也是这些大学生在学习后续专业课、进行毕业设计、以后上研究生或参加工作从事计算机软件开发的主要编程语言。本人在多年的教学探索与实践过程中发现,大学生对很多新概念的理解方面存在概念模糊、混淆不清的情况,这主要是C++语言有很多新的概念难以理解,仅凭大学生在初次学习时很难对这些概念实现准确理解和掌握,需要教师在授课前提前将这些概念进行备课总结,在上课时采用表格形式在多媒体课件中播放,这样能够极大提高学生对这些概念的领悟和理解能力[4]。本人根据多年的教学工作实践,总结出了多个大学生在学习时难以区分和理解的概念,例如引用与指针的概念的区别,普通指针、指向常量的指针和常指针三种指针的对比,以及公有、私有、保护三种继承方式的区别都进行了详细的比较,对不同重载方式下运算符重载函数参数的个数也进行了总结,为大学生的学习和教师的教学提供了有效参考。
  二、引用与指针概念的区别
  引用是面向对象的C++语言与C语言不同的一个重要概念,主要用于参数传递,引用的符号&与C语言的指针取地址运算符&、进行与操作的位运算符&相同,需要进行区分。当&符号出现在程序中,判断它究竟是引用、位运算符还是取地址运算符,可以首先看它是否为双目运算符,如果是双目运算符,则为位运算符,例如:
  则上述程序中&为位运算符。
  取地址运算符&和引用运算符&都是单目运算符。取地址运算符是位于一个已经存在的变量的前面。
  则上述程序中就是把整型变量a的地址赋给指针变量p。
  引用是标识符的别名。引用是C++中的概念,初学者容易把引用和指针混淆一起。例如,下面程序中,b是a的一个引用,a 是被引用物。
  程序中的b相当于a的别名(或称绰号),对b的任何操作就是对a的操作。所以b既不是a的拷贝,也不是指向a的指针,其实b就是a自己。
  在下面的示例程序中,c被初始化为a的引用。语句c =b并不能将c修改成为b的引用,只是把c的值改变成为10。由于c 是a的引用,所以a的值也变成了10。
  上面的程序看起来有点像在玩文字游戏,没有体现出引用的真正价值。其实,引用的主要目的和功能是传递函数的返回值和参数。在C语言中,函数的返回值和参数的传递方式只有两种:值传递、指针传递;而在C++语言中,函数的返回值和参数的传递方式有三种:值传递、指针传递和引用传递。
  下面两个例子分别描述了指针和引用参数传递的用法:
  1.采用指针进行参数传递的例子
  2.采用引用进行参数传递的例子
  1.从现象上看,指针在运行过程中可以改变它所指向的值,而引用一旦和某个对象绑定之后就不会再进行改变;
  2.从内存分配上看,程序会为指针变量分配一定的内存区域,而引用是和一个已经存在的对象绑定,不会再分配内存区域;
  3.从编译上看,指针可以改变所指向的对象(指针变量中的值可以改变),而引用一旦绑定一个对象后就不会再进行改变。
  实际上“引用”可以做的任何事情“指针”也都可以实现,那为什么还要用“引用”这个概念?这是由于指针能够毫无约束地操作内存中的任何地址,尽管指针功能十分强大,但是非常危险,很容易把一些重要数据破坏。而引用在使用时只是和一个已经存在的合法的存储单元关联,不会产生一个空的引用。
  三、指向常量的指针与常指针的区别
  很多大学生在学习普通指针、指向常量的指针和常指针概念时混淆不清。由于指针功能十分强大,对上述各种指针概念不清楚,就很容易出现内存操作隐患。如果我们希望指针所指向的内容不被随意改变,可以声明指向常量的指针,此时不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象。如果我们希望指针本身不被改变,则可以声明常指针,即指针类型的常量(声明为地址类型的常量,指针本身就是常量),则指针本身的值不能被随便改变。表2给出了普通指针、指向常量的指针和常指针在使用时指针本身和指针所指向的内容能否被改变的总结。
  下面给出了四个例子,分别表示指向常量的指针和常指针所指向的内容以及指针本身能否被改变的情况。
  1.指向常量的指针的例子,所指向的内容不能改变
  2.指向常量的指针的例子,指针本身的值可以改变
  3.常指针的例子,指针本身不可改变
  4.常指针的例子,常指针所指向的内容能改变
  四、私有、公有与保护成员的区别
  很多学生在学习私有、公有与保护成员三个概念时混淆不清,在使用从基类中继承而来的成员时不清楚在派生类中是什么访问权限,从而导致程序编译或运行错误。基类的成员可以有public(公有类型)、protected(保护类型)、private(私有类型)三种访问属性。其实,结合自然语言中的继承概念,学生就很容易理解。公有类型外界能够看得见,能够被继承下去。保护类型外界看不见,但是也能够被继承下去。私有类型外界看不见,能够被继承下去,占用内存空间,但是在派生类中不可直接访问。保护类型的成员能够被继承下去,在派生类中可以直接访问,但是外界看不见。类的继承方式有public(公有继承)、protected(保护继承)、private(私有继承)三种。不同的继承方式,会导致原来具有不同访问属性的基类成员在派生类当中具有不同的访问属性。表3给出了基类不同访问属性的成员经过不同继承方式后在派生类中的访问权限。   从表3可以看出,基类的私有成员无论经过何种继承方式都不能在派生类当中直接访问,但是在派生类中占有内存空间。在派生类外部,通过派生类的对象只能够访问到以公有方式从基类继承过来的公有成员。
  从表3中还可以看出,保护类型成员的访问权限介于公有和私有之间。从横向(外部访问)看,保护类型的成员和私有类型的成员一样,在外部通过派生类的对象不可直接访问保护类型的成员。从纵向(继承与派生关系)看,保护类型的成员和公有类型的成员一样,能够继续派生到下一级的派生类中去。因此,保护类型的成员既实现了数据共享(纵向看),又实现了数据隐藏(横向看),在数据的共享与保护之间找到了一个平衡点,有利于代码的复用与扩充。
  五、运算符重载函数参数个数的确定
  普通的运算符只能对基本类型的变量进行运算。C++提供了运算符重载的功能,能够为一个已有的运算符提供多重含义。重载后的运算符能够对自定义数据类型的变量进行运算。在C++语言中,运算符重载有两种形式,分别是重载为类的成员函数和类的非成员函数。
  重载为类的成员函数时,参数个数等于原来操作数的个数减去1(后置++、后置--运算符除外)。如果某一个对象使用重载了的成员函数,对象自身的数据可以直接访问,因此就不再需要放在参数表中进行传递,少了的操作数就是该对象本身。
  当重载为非成员函数(通常为友元函数)时,由于友元函数不属于任何一个类,利用友元函数对某一个对象的数据成员进行操作时,就必须利用该对象的名称来进行,因此所有使用到的参数都必须进行传递,参数个数等于原来操作数的个数(后置++、后置--运算符除外),而且至少应该有一个参数为自定义类型的形参。
  在C++语言中,为了区别前置和后置的单目运算符自增自减运算,后置自增与自减单目运算符要在形参列表中增加一个int类型的参数来区分。综上所述,我们采用表4来总结一下不同重载方式下运算符重载函数参数个数的确定方法。
  从表4中可以看出,双目运算符重载为类的成员函数时参数为1个,重载为友元函数时参数为2个。前置自增、自减运算符重载为类的成员函数时参数为0个,重载为友元函数时参数为1个;后置自增、自减运算符重载为类的成员函数时参数为1个,重载为友元函数时参数为2个。
  六、结论
  本文对面向对象的C++语言中几个难以理解的概念进行了详细描述与分析,使得大学生在学习C++语言中一些新的概念时能够得到很好的理解与应用。本文中引用与指针概念的区别,各种指针使用方法的比较、各种继承方式、运算符重载函数参数的个数的总结都采用表格的形式进行了对比,清晰明了,能够提高大学生对面向对象的关键概念的理解和掌握能力。
  基金项目:本文研究得到了国家自然科学基金资助(项目编号:61201434)、中国博士后基金特别资助(项目编号:200902593)、教育部博士点基金资助(项目编号:20090202120002)。
  [参考文献]
  [1]郑莉.C++语言程序设计[M].北京:清华大学出版社,2010.
  [2]钱能.C++程序设计教程[M].北京:清华大学出版社,2009.
  [3]谭浩强.C++面向对象程序设计[M].北京:清华大学出版社,2006.
  [4]范虹.论免费师范生信息技术能力的培养[J],中国电化教育,2011(5): 31-34.
  (作者单位:陕西师范大学 计算机科学学院 陕西西安)
其他文献
[摘要]小学语文教学的目的,是指导学生正确理解和运用祖国的语言文字,使学生具有初步的听说读写的能力,在听说读写的训练中,进行思想品德的教育,发展学生的智力,培养良好的学习习惯。  [关键词]朗读兴趣 直接感受 审美阿教育 口诵心惟  小学语文教学的目的,是指导学生正确理解和运用祖国的语言文字,使学生具有初步的听说读写的能力,在听说读写的训练中,进行思想品德的教育,发展学生的智力,培养良好的学习习惯
期刊
《品德与社会》课程是一门以儿童社会生活为基础,促进学生良好品德形成和社会性发展的综合课程。这门课程注重学生主体性的发展,注重通过活动促进学生的发展。但事实上这门课的很多教师对活动教学存在着一定的迷惑。《品德与社会》课程标准指出:儿童的生活是课程的基础。儿童的品德和社会性源于他们对生活的认识、体验和感悟。儿童的现实生活对其品德的形成和社会性发展具有特殊的价值。那么,如何上好品德与社会课呢?尤其针对农
期刊
[摘要]围绕体育与健康新课程的基本理念,把健康第一的指导思想落实到日常的体育教学中去,从转变观念提高认识,师生相互尊重与理解为前提来构建新型师生关系为基础;创设问题情境进行探究式学习、自主学习、合作学习及调整课堂结构来活跃课堂氛围为途径;通过激励语言、体态语言发挥课堂教学语言的魅力为手段,来营造课堂教学的和谐氛围,激发学生的运动兴趣,发挥学生学习体育的积极性、主动性和创造性,让学生能积极主动的参与
期刊
[摘要]住宅指的是供人们居住的房屋,包括别墅、公寓等。而当今住宅的概念已经不是简单的居住功能的体现, 更多的精神层面的要求随着社会的发展逐渐的体现出来。住宅庭院做为住宅的使用空间之一越来越被人们所重视。本文通过对上海住宅小庭院的调查和分析,从多个方面探讨住宅庭院设计对当今城市生活的影响。  [关键词]上海 住宅 庭院类型 庭院设计  一、绪论  对庭院一词,《中国百科全书·园林卷》中解释道:建筑物
期刊
[摘要]如何提高课堂教学效率,这是一个老生常谈的话题,也是一个常说常新的话题。  [关键词]小学 数学 教学  教学实践告诉我们,学生学习效果如何,教学成功与否,在很大程度上取决于教师如何更加科学地利用课堂时间,提高课堂效率。如何在有限的40分钟里最大限度地调动学生学习的注意力,努力提高40分钟的课堂教学质量,这是我们每个教育工作者必须面对必须思考的问题。如何才能提高单位时间内的工作效率,让老师教
期刊
[摘要]对照新课标,努力完成各学段的积累任务,让积累成为学生学习语文的一种习惯,才能使学生获得基本的语文素养。  [关键词]阅读目标 积累 词语 课外阅读  新的《语文课程标准》指出:“九年义务教育阶段的语文课程,必须面向全体学生,使学生获得基本的语文素养。” 一个没有语文素养的人,他的理解能力,感悟能力、表达能力都将受到影响。那么,学生语文素养的形成,提高要靠什么?我认为主要靠的是平时的积累。有
期刊
[摘要]阅读是运用语言文字获取信息、认识世界、获得审美体验的重要途径。在阅读教学中,教师要抓住关键词语、抓住关键部分、结合时代背景等方法来领悟文章,有效地让学生理解重点、难懂的句子的含义。  [关键词]小学语文 阅读教学 句子含义 方法初探  阅读是运用语言文字获取信息、认识世界、发展思维、获得审美体验的重要途径。抓住文章的重点语句理解文章的主要内容是小学阶段最主要的学习方法,在阅读实践中,我们常
期刊
[摘要]汉字是中华民族的瑰宝,蕴含着丰富的文化信息,学习汉字的过程就是学习文化的过程,学习审美的过程。新课标强调了识字教学在语文教学中的重要地位,识字的过程更是培养学生学习能力的过程。  [关键词]识字 生活化 快乐 创造性 开放性  汉字是中华民族的瑰宝,蕴含着丰富的文化信息,学习汉字的过程就是学习文化的过程,学习审美的过程。新课标强调了识字教学在语文教学中的重要地位,识字的过程便是培养学生学习
期刊
[摘要]语言是重要的交际工具,是人类文化的重要组成部分。语文教学的主要任务是培养学生的听说读写能力。可见,语言积累是语文学习最基本的任务,是提高阅读能力的关键,也是提高语言表达能力的基础。  [关键字]资源共享 背诵法 摘抄法  小学语文教学的目的,是培养和提高学生理解和运用祖国语言文字的能力。儿童要理解和运用语言文字,必须建立在正确理解和运用词语的基础上。词语是语言的建筑材料,正确地理解和运用词
期刊
[摘要]人们对教学语言的关注从很早就开始了,它是教师传道、授业、解惑的重要手段。离开了教学语言,教师就无法顺利完成教学任务。  [关键词]语文课堂 语言艺术  语文课堂教学离不开语言,语言是语文教师传授知识、传递信息的主要载体之一。语文教学语言艺术与语文课堂教学效果有密切的关系,苏霍姆林斯基说:“教师的语言修养在极大程度上决定着学生在课堂上的脑力劳动的效率。我们深信,高度的语言修养是合理利用时间表
期刊