回 帖 发 新 帖 刷新版面

主题:[讨论]C++教学教材中的改革与创新尝试

        谢谢大家!1531

回复列表 (共26个回复)

21 楼

[quote]
    现在的问题集中到一点,就是传统教材中对“stud1是Student类型的变量”语句,认为是定义语句,公然认为这是“将stud1定义为Student类型的变量”。这种说法到底是对还是错?  
    只有得到明确的回答,下面才能作出相应的处理。
[/quote]
您說的很片面。
“stud1是Student類型的變量”語句,既有可能是聲明,也有可能是定義!

22 楼




集中到一点,只问“将stud1定义为Student类型的变量”。这种说法到底是对还是错?  

23 楼

[quote]


集中到一点,只问“将stud1定义为Student类型的变量”。这种说法到底是对还是错?  
[/quote]
很少見有這樣講的,一般都說:
定義一個Student類型的變量stud1。
或許與您說的那句話是等效的吧。
總之我個人覺得沒有什么不可以的。這句話很明顯就是代表它是“有動作”(內存分配,構造函數調用等等)的語句,而非僅僅是告訴人有一個外部的“符號”。

24 楼

個人認為,如果您覺得定義一詞用的不好,則要么就換詞,要么就還是當做方言處理。

現在您的做法恰恰給大家又增加了些障礙:
1、看國內外其他著作與貴著作時的困擾:同樣的詞竟然代表不同的意思!您認為少數能打贏多數?
2、翻譯外國文獻時的困擾:Declare再也不是代表“聲名”,同時define再也不是代表“定義”了,它們在不同的情況下會有不同的意義,譯者一定要相當有水平且保持高度清醒!這樣勢必讓本來就跟不上國外技術的中國更有落后的理由了。又或是您認為您的技術水平遠超國外?他們將會以您的用詞為標準來修改自己的著作?

25 楼

其實您的初衷是好的,但實際上每個創新都必然會存在它的難處,剛開始必然舉步為艱,還有可能半路夭折!
您想讓我們承認原來的“定義”一詞是用錯了!但您應該去找一個可代替的方式,而不是用原詞卻修改期使用范圍。

怎么說呢,您的教材老手看了也就看了,還是能明白大概,最多發發牢騷,覺得用詞很別扭。但新手看了(假設非常認真的)那將會是他(OR她,程序員男性多,這里沒有任何歧視問題)的惡夢的開始。從此以后他只能跟著您寫的C/C++系列,您要不進步,他就永遠也無法進步,更別說超越了(貌似這倒是賺錢的好方法,他只能讓你賺了:)呵呵,玩笑而已)。

26 楼

    国庆节前,众位网友们对我主贴发表了好多很好的意见,增加了我们之间的相互了解和沟通,我很感谢。特别是在国庆节期间,强强和cgl_lgs提出的意见启发我要看看国外书是怎么写的。cgl_lgs在2日凌晨发一贴,3日半夜还把我贴问题记挂在心,连发四贴,我看了,着实使我感动万分。
    国庆节一过,今天我径直去学校图书馆。找到一本人民邮电出版社2006年1月出版的《SMALL C++ How to Program》第5版 [美]H.M.Deitel和P.J.Deitel合著。据该书内容简介中说,该书是“全球使用最广泛的C++教材”。从该书的版次及简介中的评价来看,该书应该是比较权威的了。
    书中对××类的代码表示,认为是对类的定义(class definition);对int number1;int number2;int sum;认为是对变量的声明(declaration);对类的对象建立,则用的是创建(create)。
    我真高兴,所有这些都与传统教材中的认定相反,而与我的主张却不谋而合。使我心中顿感云消雾散,感到“英雄所见略同”。当然,这里只是对古语的引用,不能当真认为我是“英雄”。这顶多只能算是我“愚者千虑之一得”而已。
    常规理解,使用“定义”名词时,必有“定义项”与“被定义项”等同(可用“=”表示),看百度搜索知道:“一般来说,一个定义往往是表达被定义项与定义项之间的等同的句子”。反过来说,只有“定义项”和“被定义项”等同,才能使用“定义”语句。
  一个单身汉是一个未婚男子。  是定义语句,因为:单身汉=未婚男子。
  小于60分的分数是不及格分数。是定义语句,因为:小于60分的分数=不及格分数。
  Student类是Student类的代码。是定义语句,因为:Student类=Student类的代码。
上面这几个例子,等式两边都是类,分别是定义项和被定义项,二者等同。所以是定义语句。
  邻居大哥是单身汉。       不是定义语句,因为:单身汉不=邻居大哥。 
  56分是不及格分数。       不是定义语句,因为:不及格分数不=56分。
  Stud1是Student类型变量。 不是定义语句,因为:Student类型变量不=Stud1
  int a;                   不是定义语句,因为:int类型不=a
  Student Stud1;           不是定义语句,因为:Student类型不=Stud1
  定義一個Student類型的變量stud1。是错句,因为Student类型变量不=Stud1,不可用“定义”词,不可作为定义语句。
上面这几个例子,等号左边是类,右边是类的一个实例,二者不等同,故不能作为定义语句。而只能作为说明语句、声明语句;或对于对象而言,作为对象的创建语句。
    传统教材中认为“Student Stud1;”是表示“Stud1是Student类型变量”这是可以的,但进一步认为是“将stud1定义为Student类型的变量”,这就错了,因为这不能作为定义语句。在这里不可用“定义”词。就好比说“56分是不及格分数”,这是对的,但若认为这是“将56分定义为不及格分数”,这就错了。若教务处认了这句话,则认为下式成立:“不及格分数=56分”,从而认为54分、32分、58分…,只要不是56分,通通全都是及格分数。该补考的不补考了,该留级的不留级了。结果,教务长就该“下课”了吧。
   “定义”的概念,不可等闲视之。考公务员要考“定义判断题”内容涉及方方面面,可见各行各业都要用到“定义”概念。但传统教材P.124第20~21行中明确提出:“把建立存储空间的声明称为定义,而把不需要建立存储空间的声明称为声明”。按此标准贯穿全书。这种“定义”的使用明显与常规理解相悖,势必会造成“定义”概念的混乱。
    这不可看作是C++方言而姑息之。广东话“谈恋爱”叫“拍拖”,“餐费结算”叫“埋单”,写法不同叫法不同,这是方言。像强强提出的“弄一个或搞一个”,这倒可作为C++方言。但“定义”不行,因为一笔写不出两个“定义”词,一口叫不出两个“定义”音。国内国外对“定义”都是同一个概念,我们C++不应别出心裁搞个建立不建立存储空间来确定“定义”的用词,以致造成“定义”概念混乱,贻害无穷!

我来回复

您尚未登录,请登录后再回复。点此登录或注册