前缀++类重载函数的返值为类名是不妥的-与吕凤翥老师等商榷

前缀++类运算符重载函数的返值是类名的讨论-与吕凤翥老师等商榷

我的书稿还对流行的教科书存在的一些问题进行了探讨,笔者相信,连教科书都会出现的问题一定具有探讨的必要。

在书稿中隐去了发生问题的教科书的名字,但是在博客文章中我将指出这些书的名字。

前缀

++类运算符重载函数的返值是类名,我以为不妥

3本书这样做。它们是:

1吕凤翥《C++语言基础教程》、清华版、ISBN:7-302-03321-8

2孟威、刘慧宁《C++程序设计教程》、机工版、ISBN:7-111-08318-0

3宋振会《C++语言编程基础教程》、清华版、ISBN:7-302-10767-X. 

 

现在提出我的见解,愿与诸位老师讨论。

 

请看下例:

#include <iostream.h>

class Person{

        intage;

public:

        Person(inti=0){age=i;}

        Person operator++();

        voidprint(){ cout<<"The boy's age="<<age<<endl;}

};

 

Person Person::operator++() //①前缀++运算符函数

{      age++;

        return*this; //

}

 

int main()

{      Personboy(10);

        boy.print();

        ++(++boy); //编译系统解释为boy. operator++()

        cout<<"afterdouble ++: "<<endl;

        boy.print();

        return0;

}

运行结果为:

The boy's age=10

after double ++:

The boy's age=11

输出结果证明程序是有问题的。

问题就出现在函数返值的类型上。程序中的语句②是return语句,由于函数的返值类型没有被定义成引用,所以会发生复制(记得吗?还要调用拷贝构造函数的),返回的不是操作数本身,当表达式中的前置++运算需要连续进行两次以上时,实际自增在操作数对象身上的只有一次。

函数返值时发生的复制问题请参阅前面讲过的“函数返值与对象初始化细节”一节。

不仅自增连续两次有问题,把对象自增一次放到表达式里有时也有问题。先看一个面向过程的一个例子:

#include <iostream.h>

int main()

{      inti=0;

        int*p0=&i;

        int*p1=&(++i); //取到的仍然是i的地址

        cout<<(p0==p1)<<endl;

        return0;

}

运行结果为:1

原因不必赘述。下面请看一个面向对象的例子:

#include <iostream.h>

class Person{

        intage;

public:

        Person(inti=0){age=i;}

        Personoperator++();

        voidprint(){ cout<<"The boy's age="<<age<<endl;}

};

 

Person Person::operator++() //①前缀++运算符函数

{      age++;

        return*this; 

}

 

int main()

{      Personboy(10);

        Person*p0=&boy;

        Person*p1=&(++boy); //取到的不是对象obj的地址,而是其复制品的地址

        cout<<(p0==p1)<<endl;

        return0;

}

运行结果为:0

这时因为重载运算符函数返回时候发生了复制,取到的不是对象obj的地址,而是其复制品的地址。

如果,把上例重载运算符函数返值类型改成类名的引用,输出结果就变成1了。

----------------------------------------------作者声明-----------------------------------------

我是一个老头,65岁,编过10年程序,在大学教过15年书,写了一本书,名为《C++释难解惑》,这几年来一直在投稿。出版社对我的书稿评价很好,但他们就是由于经济上的风险。总是在出版的最后关头反悔。其中北京****出版社已经签字画押的情况下反悔;北京****出版社与我签过电子合同;书稿在**大学出版社放了9个月,还让我请名人写序言,最后说现在书很难卖,并且还给我发了个近半年的图书销售的excel文档让我看,希望我理解出版社。我只好仰天嗟叹了。

有编辑朋友建议我把书稿放到网上让读者试读,以印证读者的人数和满意度。我想这是一个办法,即使永远不能出版,也不至于烂在肚子里。并且我在网上也看到这个办法成功的先例,例如《C语言深度解剖》,后来就由北航出版社出版了。

C语言深度解剖》的作者采用的方法是把书稿上传到网上。我想采用化整为零的方法,每周起码在我的CSDN博客里发一篇文章,是书稿里的内容稍加改造的。之所以这样做确实出自于私心,就是想借此赚取CSDN的积分。因为我以前忙于教书,无暇经常光顾CSDN,所以几乎没有积分,这样是不能被大家所认识的。

博文与书稿上的文字可能有极少的字面上的不同。

如果您对我的书稿和博文感兴趣,请您推荐给您的朋友,谢谢。

本书稿已经国家版权保护中心进行了作品登记,登记号为:2010-A-023237

下面我把一些出版社给我的来信摘录作为参考。您可以看到,我的书名在不同的出版社和编辑面前改了好几次名了,现在书稿的名字是我自己的。

//-----------------------------------以下是**大学出版社编辑的来信---------

陈老师,

   选题我暂以《C++释疑解惑:课本没讲透的131个问题》的名字报上去了。通过审批应该问题不大。下面几点,是咱们电话里说过的,麻烦你着手进行啊:)

 

//-----------------------------------------------------------------------------------------------------------

陈老师好

从您的来信,我觉得您的文字驾驭能力挺好的,如果您的书,能写成您给我来信的风格,也不错,现在市场上还就缺这样的书。那种一步步讲操作,枯燥的原理,确实没人愿意看,而那种语言比较生动,穿插一些开发故事,体会心得之类的文风,让冰冷的技术活了起来,容易引起读者的共鸣。所以,建议书至少300页,写得生动些,多配些图,甚至每章最后都可以增加上一些问答,比如您历年教学收集到的经典问题等等。当然,其他的一些方法,也都可以尝试,我这里只是抛砖引玉。

 

//----------------------------------------------------------------------------------------------------------

尊敬的陈老师:您好!

由于负责这本书的编辑已经离职,这本书现由我负责与您沟通及出版事宜。

这本稿件从市场上鲜有的写作角度出发,揭示了C++的很多难点,有些内容具有一定的深度,同时又力求在写作上深入浅出,会有一定量的读者关注书中的问题,这是本书的一大特色

//-------------------------------------------------------

 

陈老师:您好!

 今天,就这部书稿又与领导进行了沟通。从这部书稿可看出,其中积淀了您多年的经验和大量心血,力图为读者学习C++排疑解惑,实属难能可贵。

 从现在的销售数据(开卷数据:专门的图书销售调查数据,采集自全国2000多家书店,随邮附上)看,目前市场上同类书整体销量不理想(月销200本以上较好),即便在这样的数据面前,相对好销的书还属于基础入门的书或教材。在此,也冒昧地想和您探讨,如何将此书出销好的办法,比如:您能帮助出版社做哪些宣传推广,或者利用院校资源推广销售,以及在零售书店怎样做宣传,才能让读者广泛知晓本书并认可,从而形成销售。

 

 

//------------------------------------------------------------------------------------------

 

陈老师:您好!

 

    从来信看到您对开卷销售数据进行了详细分析,相信您也看出零售图书市场的销售状况,即便是第1名的图书也不过160/月,假设书店与网店销量平分秋色,每月的总销量也只有320本,一年的销量为3840册,按计算机书的平均销售周期一年半计算,预计为5760册(纯零售不包括教材)。以此推算,当月销量在100本的书,预计3600册。这个销量如果没有教材的销量支撑,从出版社的成本计算基本上是没有什么利润的,如果计算上在途、退货等因素,稍有不慎恐怕就会亏本,这基本上就是纯零售书的状况。

 

    信中提到的几位作者的书,销量多则50多本,少则几本,如果纯靠零售销售的话,简单可以看出最终销量的情况。

 

    社里对您这本书的含金量一直都是肯定的,只是苦于店销图书的销售状况,也深知您的身体状况在写作上将要付出的巨大努力,觉得再让您改稿实在是有些不合适。

 

 

//-------------------**大学出版社电子出版物编辑的来信--------------------------

陈老师您好:

    我与图书编辑沟通了,就如您告诉我的,他对本书的质量不持疑义,主要考虑的是本书的经济效益。我们作为电子出版和网络出版部门,还没出过单独的网络出版物,这条路暂时不考虑。电子出版物5000左右的成本,包括生产成本和人力成本,要保证持平的话,恐怕要由作者承担。这是我向领导报选题时的一项。您作为作者,据我理解,如果没有相关经费支持,由您个人承担是有问题的。所以这个选题的前景还要您考虑。

------------------------------------------------------------------------------------------------------------

参考书目

1.   []Ted FaisonBorland C++3.1编程指南,蒋维杜等译,清华大学出版社,1993

2.   侯俊杰,深入浅出MFC,华中科技大学出版社,2001

3.   []Jess Liberty21天学通C++,人民邮电出版社,2002

4.   [] Stanley B.Lippman,深度探索C++对象模型,侯捷译,华中科技大学出版社,第1 2007  

5.   张海藩等,软件工程,人民邮电出版社2010

6.   宛延闿,C++语言和面向对象程序设计,第二版,清华大学出版社1997

7.   网上下载的全国高自考上机考试题目

8.   陈树振、陈翼男,C++文本文件的一种读写方法,《电脑开发与应用》2008年第10期,中国北方自动控制研究所

9.   陈树振,CC++的图示教学法,《教学研究》,200510月,北京科技职业学院

10.             [] Peter Van Der Linden C专家编程,徐波译,人民邮电出版社,2002,12

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值