Project1

标题: 一道C++练习题求解 [打印本页]

作者: 枫起    时间: 2011-5-29 13:05
标题: 一道C++练习题求解
要求设计一个人事管理的“人员”类,人员属性为编号、性别、出生日期、身份证号等,其中出生日期为日期类的内嵌子对象,用成员函数实现对人员信息的录入和现实,要求包括析构函数、构造函数、复制构造函数、内联成员函数、带默认形参值的成员函数、类的组合。

以下是我没写完的。。。当然,尝试着编译了下。。各种出错- -
  1. // 类习题4-10.cpp : 定义控制台应用程序的入口点。
  2. //

  3. #include "stdafx.h"
  4. #include <iostream>

  5. using namespace std;

  6. class Renyuan{
  7. public:
  8.         Renyuan(int gz_id=360203199301070001 ){           //构造函数
  9.         sf_id=gz_id;
  10.         }
  11.         Renyuan(Renyuan &R);                    //复制构造函数
  12.         void shuchu();
  13.         void ID(int bianhao);         
  14.         bool xingbie(bool nannv);
  15.         void shenfenzheng(int sfz);
  16.         ~Renyuan(){}         //析构函数
  17. private:
  18.         int id,sf_id;
  19.         bool xb;
  20. };

  21. inline shuchu;

  22. int Renyuan::Renyuan(Renyuan &R){           //复制构造函数的定义
  23.         sf_id=R.sf_id;
  24. }


  25. //成员函数对人员信息的录入与显示
  26. void Renyuan::ID(int bianhao=101101){            //带默认形参值的函数   
  27.         cout<<"输入你的公司编号"<<endl;           
  28.         cin>>id;                           //录入
  29.         cout<<"以下是你的公司编号"<<id;    //显示
  30. }
  31. void Renyuan::shenfenzheng(int sfz){
  32.         cout<<"输入你的身份编号"<<endl;
  33.         cin>>sf_id;                        //录入
  34.         cout<<"以下是你的身份编号"<<sf_id;//显示
  35. }

  36. class riqi{             //日期函数
  37. public:
  38.         void chushengriqi(int nian,yue,ri);

  39. private:
  40.         int year,mouth,day;
  41. };
复制代码

作者: yangff    时间: 2011-5-29 13:54
本帖最后由 yangff 于 2011-5-29 13:55 编辑

有病吧……这老师,这种东西要用Ruby写……另外定义这么多东西……用Define多好啊……
作者: Kimu    时间: 2011-5-29 13:59
刚开始研究C++,无力回答= =
作者: 逆鳞R    时间: 2011-5-29 15:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 枫起    时间: 2011-5-29 20:44
没人解答么。。。另外感谢楼上提出的错误。。。话说还把定义一个函数里面的类型以为成可以和定义变量一样直接int X,Y,Z这样呢。。。
作者: 匿名    时间: 2011-5-29 23:42
yangff 发表于 2011-5-29 13:54
有病吧……这老师,这种东西要用Ruby写……另外定义这么多东西……用Define多好啊…… ...

没关系,加个RUBY解释器进去。然后用RUBY开始写吧 囧
作者: 苏小脉    时间: 2011-5-30 03:35
直接给你鱼,对你有什么帮助呢?倒不如你先继续写着,不解之处,我们倒是可以帮你。

几个方向和建议:
1、声明放入头文件,定义放到源文件中,不要混搭(哪怕是一个空的析构函数实现)。分离接口和实现,这是 C++ 的惯例;
2、Date(日期)类和 Personnel(人员)类各自一个头文件和源文件;
3、形参默认值放在声明接口处而不是实现处——实现细节对用户来说不重要;
4、对象属性一概设为私有,开放 getter 和 setting,将这些声明为内联(inline)函数;
5、复制构造函数需要复制对象所有成员;
6、设计 Date 类构造函数,接受年、月、日参数,而不是用别的成员函数;如果有别的日期初始化途径,可以重载;
7、给两个类都提供一个输出函数,以格式化的字符串形式输出类实例;
7、用英语命名而不是拼音

另外对沙发杨飞凤提出的第一个观点表示强烈赞同;P
作者: 非常白菜    时间: 2011-5-30 08:47
愁死了,这么简单的实现为嘛要搞得这么麻烦。。。面对这种需求,还讲究个什么代码安全性,用不着get set,统统public,属性方法全用拼音,一行注释没有,要还以颜色啊。
不是说JAVA语法沿袭自C++吗,但这么一看真是没什么可比性,虽然代码上一样那么臃肿。。。只接触过JAVA的咱表示逻辑上看不懂。。。
作者: 苏小脉    时间: 2011-5-30 10:07
非常白菜 发表于 2011-5-30 08:47
愁死了,这么简单的实现为嘛要搞得这么麻烦。。。面对这种需求,还讲究个什么代码安全性,用不着get set, ...

自下而上的软件设计都是从“简单的实现”开始组建的,跟着工业标准走自有道理。现在的需求固然简单,难保将来需求不会更变,到时候使用 getter/setter 维护统一接口的(开发)效率就体现出来了。“搞得这么麻烦”通常并不是为了自己,是为了集体。

一行注释没有

确定?我倒是看到了不少注释,虽然大部分都没什么意义。比如一看函数签名就知道是复制构造、析构函数的声明和定义后面完全不需要注释。理想的代码是一行注释也不需要。如果认为一段代码需要注释才能让读者理解,那就应该反思如何重写代码使得注释不被需要。实在无法进一步让代码更加清晰时,再使用注释。

不是说JAVA语法沿袭自C++吗,但这么一看真是没什么可比性,虽然代码上一样那么臃肿

“沿袭”这个字眼未免太过强烈,我会用“衍生”或“深受……影响”。Java 和 C++ 都是 C 风格语法家族的成员(但两个晚学却在很多层面违背了其祖所发扬的极简主义),都是静态类型语言,都是命令式语言,都是基于类的面向对象语言。大半相同的关键字,一如既往的弯括号代码块,基本一致的运算符,这些都可比呀。
作者: 枫起    时间: 2011-5-30 10:16
先感谢苏姐的建议。之所以没有按照规则来写,拼音啊什么的,首先是因为这是个实践课的作业,时间不多,所以这么将就着写。第二是如果写的规范了,什么都分开定义了,老师检查的时候又该吵吵这么麻烦干什么了。。。平时自己写的话肯定是要按照规范来的,养成一个好的习惯也是必须的。
作者: 非常白菜    时间: 2011-5-30 10:47
汗,脉大误会了,我的意思是故意反其道而行,有意恶心一下出这需求的人,呵呵。至于为什么规范代码,我是明白其中意义的。
从编译后运行的角度来讲JAVA是静态语言没错,不过JAVA是有反射机制的,算是半动态语言吧。我没怎么接触过C++,但感觉JAVA明显不同C++那样受C的大量影响比如无指针,而更强调面向对象。但现在看来后劲乏力,革命性尚显不足,有被后辈赶超的趋势了。
作者: 苏小脉    时间: 2011-5-30 12:08
非常白菜 发表于 2011-5-30 10:47
汗,脉大误会了,我的意思是故意反其道而行,有意恶心一下出这需求的人,呵呵。至于为什么规范代码,我是明 ...

很抱歉没看出你的反讽 T T

我说的是静态类型语言,即类型检测(静态地)发生在编译时(这和 Ruby 这样的动态类型语言在运行时检测类型形成对比),非指缺乏动态性的静态语言。

反射确实是衡量动态性的一大因素,但 Java 6 之前的反射处于一种只读模式,并不支持猴子补丁等程序自修改的功能;Java 6 开放了 JVM 预编译器的 API,这才能动态创建类,所以现在说 Java 是动态应该是不会有争议的了。其实单论动态性而言,C++ 也有通过虚函数实现的动态函数分派(这个概念的其它名称:迟绑定、动态绑定、多态性),但较之当代的各大动态语言,C++ 仅有的那点动态性还差得远了,所以通常不被认为是动态语言。

从编译后运行的角度来讲JAVA是静态语言没错

“编译后运行”是一个实现语言的细节,并非语言特性。Java 的标准中没有一行提到过 Java 语言应该被编译还是被解释。大部分人用的是 Sun 的 Java 实现(JVM),而 Sun 实现 Java 的方式是先进行编译,所以 Java 可以被称为“频繁被编译”的语言。实际上从实现角度来看,即便是被编译,代码也不一定是静态的,得看编译成什么代码——是底层 CPU 的机器指令,还是 Java 虚拟机器指令(字节码)?只有前者才能说是静态语言,后者的指令被虚拟机执行,是可以具有很大的动态性的。

感觉JAVA明显不同C++那样受C的大量影响比如无指针

嗯,所以只能说 Java 的语法和 C++ 有交集而非其子集。

但现在看来后劲乏力,革命性尚显不足,有被后辈赶超的趋势了。

当年轻人们开始把无限的创意和思想融入编程语言的时候,大部分 Java 程序员还在框架下进行体制化的代码作业,既像《肖申克的救赎》中的囚徒,又像一群克隆人。有人曾在 Java 如日中天时说:“如果你只是想要一个工作,那好吧,去学 Java 吧。”他们畏惧改变,故而总是持续着小规模的重构。在 Ruby、Clojure、Scala、Go 等新生代语言面前,Java 就像一个与时代脱轨的、严肃的老者。

Java 社区目前仍然庞大,其用户群体依旧维持榜首,短时间内不会消隐。JVM 号称目前最强大的虚拟机,而 Scala 目前的官方实现是在 JVM 上,所以很有潜力成为 Java 的替代。
作者: 雷欧纳德    时间: 2011-5-30 12:43
显然身份证号必然是字符串而不是数字
作者: link006007    时间: 2011-5-30 15:47
只要语言本身有使用方便的地方,或者是先行系统足够稳定足够好,那么这门语言就会活着。。
像Java这种已经有很多现有大型系统已经在使用的语言,想要被取代很难吧,说不定衍生出其它版本的几率比较大。比如google的android,你说他为什么不适用ruby的语法风格或者是虚拟机,而是要实现一个类似于JVM的东西呢???
作者: 非常白菜    时间: 2011-5-30 16:28
因为JAVA已相当稳健成熟了,使开发者一开始就站在了巨人的肩膀上,但新技术理念需要很长的发展检验期,而在实际应用中越需要稳健项目就越担不起这种风险,或者可能还有成本之类的因素。google显然不像是搞科研的公司,坐享其成当然再好不过了。
作者: 匿名    时间: 2011-5-30 16:32
偶有个更能恶心人的方案,直接任何语言编写后转汇编,然后直接C代码中嵌这坨汇编进去……
作者: 枫起    时间: 2011-5-30 20:23
这帖成讨论编程语言特点的帖子了- -
作者: 苏小脉    时间: 2011-5-31 09:54
link006007 发表于 2011-5-30 15:47
只要语言本身有使用方便的地方,或者是先行系统足够稳定足够好,那么这门语言就会活着。。
像Java这种已经 ...
像Java这种已经有很多现有大型系统已经在使用的语言,想要被取代很难吧,说不定衍生出其它版本的几率比较大。

Java 的 API 是 JVM 的本地接口,可以很轻松地被绑定到任何目标平台是 JVM 的语言,所以现在很多人认为 JVM 上的新生语言 Scala、Groovy 有潜力取代 Java。比如,Scala 的 Lift 框架(一个“借鉴” Rails 的设计哲学而衍生的类似的 Web 框架)就集成了不同的 Java 框架的绑定,同时也支持各种 Servlet 容器,如 Tomcat,Jetty。

比如google的android,你说他为什么不适用ruby的语法风格或者是虚拟机,而是要实现一个类似于JVM的东西呢???

Java 目前是主流,我相信这里并没人能否认这一点。但是,推动科技进步的总是持续不断的创新和改变,我相信越来越多的人都看到了 Java 的不足而开始反思技术发展的未来。CGI 当年也是主流,但大势所趋,还是从历史的舞台淡出了。

另外我还有个主观性极强的、荒诞的不使用 Java 的理由:Java 现在归甲骨文所有,而我们都讨厌甲骨文!:lol这不,前不久 Google 才被甲骨文控诉抄袭 Java 实现的代码。最近好多 geek 由于 MySQL 被甲骨文收购转而奔向 PostgreSQL,正是:恶其主,施及器{:nm_9:}

Android 的 Dalvik 虚拟机只是一个平台,理论上任何语言都可以在上面运行,比如 Ruboto(Ruby on Android)就是一个把 Ruby 编译为 Dalvik 字节码的项目。

@白菜 因为JAVA已相当稳健成熟了,使开发者一开始就站在了巨人的肩膀上,但新技术理念需要很长的发展检验期,而在实际应用中越需要稳健项目就越担不起这种风险,或者可能还有成本之类的因素。google显然不像是搞科研的公司,坐享其成当然再好不过了。

嗯!在移动设备上,稳定性和安全性比在 PC 上更加重要。

Google 不搞 fancy 的科研,但他们的创新产品却一直改变着世界,至少在我看来他们绝非坐拥金山的地主老财。Google 的主要收入源于自动化的 AdWords,所以可以把大量的人力财力投入到自由、高效的开源开发中,这也造就了 Google 在软件界的美名,和微软、甲骨文等形成鲜明对比。
作者: link006007    时间: 2011-5-31 10:21
哈哈  oracle的rp是不咋地,不过不能把个人的一腔热血和整个大团队的效益混为一谈。
取代Java,你要取代Java拥有的现行的一些列稳定的,运行良好的,效率比其他虚拟机都好的系统和架构。
你可以不用Java,不过如果现在要推行或部署实现一个大的方案,实际情况会迫使你用Java。
你有精力去重新实现所有的库,不过别人可没时间。
取代Java就和一个文明的消逝一样,很难在一夜之间完成。说不定在这些过程中,其他的东西又浮现出来了。总之未来不可预料,任何事物都会消亡,不过无法预计其未来。获取取代Java的是J++也不一定。。。,
又或者过了你年,又是一堆新的思想,正好Java又符合这样的思想,那么Java又会复活。
主导语言的是实际需求和编程思想,而这些思想,永远都在变化。
作者: 精灵使者    时间: 2011-5-31 10:28
思想可以用语言来表达,而且可以用任何不同的语言来表达,除了表达形式简单或者复杂一样。
在计算机里也是一样。
作者: 雷欧纳德    时间: 2011-5-31 10:36
人家只是问个编程题,你们扯那么远干啥。。。。
作者: link006007    时间: 2011-5-31 10:39
这是水区,不扯淡就没机会了
作者: 雷欧纳德    时间: 2011-5-31 10:41
这倒也是,我们顺便聊一下宇宙的形成与凤姐诞生之间存在的必然联系吧?
作者: link006007    时间: 2011-5-31 10:44
可以。。。因为宇宙都诞生了,难免会衍生出诸如此类的东西
作者: 苏小脉    时间: 2011-5-31 11:21
link006007 发表于 2011-5-31 10:21
哈哈  oracle的rp是不咋地,不过不能把个人的一腔热血和整个大团队的效益混为一谈。
取代Java,你要取代Jav ...

虚拟机仍然是 JVM,但语言可以不是 Java。库不用重写,Java 之前的库编译为 JVM 二进制就能直接用,需要的是语言绑定,语言本身的稳定性以及学习曲线。没人说要让 Java 今天就下地狱,过渡肯定是有的,这我们都理解。在过程中浮现出其它的东西正是我们所期望的发散性啊,Scala 和 Groovy 都是在这个过程中浮现出来的东西。

获取取代Java的是J++也不一定。。。,

现在说 J++ 会让人误以为是微软的那个 Java 实现{:nm_7:}
作者: link006007    时间: 2011-5-31 16:04
本帖最后由 link006007 于 2011-5-31 16:07 编辑

好吧  是这样的= -  

作者: yangff    时间: 2011-5-31 22:31
枫起 发表于 2011-5-30 10:16
先感谢苏姐的建议。之所以没有按照规则来写,拼音啊什么的,首先是因为这是个实践课的作业,时间不多,所以 ...

还好我可以免修……
作者: 灼眼的夏娜    时间: 2011-5-31 23:05
看着你们一个二个的 。枫酱情何以堪....




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1