分类 云南简章 招生动态 考试问答 报考指南 地州报名 专业.确认

2014年计算机二级C++复习资料:类的其他几点问题

 三、构造函数的参数初始化表
  如果类对象的某些数据成员没有载构造函数内部被初始化,那么必须使用构造函数的参数初始化表对他们进行初始化。否则,编译器不止到该如何初始化这些还等着在构造函数内部赋值的成员。我们习惯用参数初始化表来初始化所有数据成员。 
   class Date 
   { 
   int mo,da,yr; 
   public: 
   Date(int m=0,int d=0,int y=0); 
   }; 
   class Employee 
   { 
   int empno; 
   Date datehired; 
   public: 
   Employee(int en,Date & dh);
   }; 
  可以用下面两种方法编写Employee类的构造函数: 
   Employee::Employee(int en,Date & dt)
   { 
   empno=en; 
   datehired=dh; 
   } 
  或者; 
   Employee::Employee(int en,Date & dt):empno(en),datehired(dh)
   { 
   //empty 
   } 
  虽然这两种方法效果是一样的,但是根据Date对象默认构造函数的复杂性的不同,这两种形式的效率差别是很大的。

  四、对const修饰符的简单说明 
  如果一个对象被声明为常量,那么该对象就不可以调用类当中任何非常量型的成员函数(除了被编译器隐式调用的构造函数和析构函数)。看下面的代码; 
   #include iostream.h 
   class Date 
   { 
   int month,day,year; 
   public: 
   Date(int m,d,y):month(m),day(d),year(y) {} 
   void display() 
   { 
   cout < }
   } 
   int main() 
   { 
   const Date dt(4,7,2004); 
   dt.display(); //error 
   return 0; 
   } 
  这个程序尽管编译时没有问题,但运行时却出错了。这是因为常量对象不能调用非常量函数。编译器只看函数的声明,而不在乎函数的具体实现。实际上函数的实现可以在程序中的任何地方,也可以是在另一个源代码文件中,这就超过了编译器的当前可见范围。 
   //date.h 
   class Date 
   { 
   int month,day,year; 
   public: 
   Date(int m,d,y); 
   void display(); 
   }; 
   //date.cpp 
   #include iostream.h 
   #include date.h 
   Date::Date(int m,d,y):month(m),day(d),year(y) {} 
   void Date::display() 
   { 
   cout < }
   //program.cpp 
   #include iostream.h 
   #include date.cpp 
   int main() 
   { 
   const Date dt(4,7,2004); 
   dt.display(); 
   return 0; 
   } 
  解决出错的问题有两个方法:第一是声明display()函数为常量型的 
   //in date.h 
   void display() const 
   //int date.cpp 
   void Date::display() const 
   { 
   cout < }
  另一个解决方式就是省略掉Date对象声明里的const修饰符。 
   Date dt(4,7,2004); 
  还有另一个容易出错的地方: 
   void abc(const Date & dt)
   { 
   dt.display(); //error 提示display没有const修饰符 
   } 
  函数abc()声明了一个Date对象的常量引用,这说明该函数不会修改传递进来的参数的值。如果Date::display()函数不是常量型的,那么在函数abc()里就不能调用它,因为编译器会认为Date::display()函数有可能会修改常量的值。 
  不论类对象是否是常量型的,它必须修改某个数据成员的值时,ANSI委员会设立了mutable关键字。


   >>学课在线网课试听.报名        >>学课在线智能题库.模拟做题       >>直播课程       >>录播课程

课程名称
课程免费试听
课程名称
课程免费试听
课程名称
课程免费试听
初级会计师

一级建造师

执业药师

中级会计师

二级建造师

护士资格证

注册会计师

一级造价工程师

健康管理师

经济师考试

监理工程师

考研辅导课

银行从业

安全工程师

自考课程

基金从业

一级消防工程师

心理咨询师

企业人力资源管理师

法律职业资格考试

公共营养师

社会工作者

消防设施操作员

保育员

教师资格证

成人高考

育婴师

公务员培训

文职培训

英语四六级

计算机软考
养老护理员
税务师培训

房产经纪人
咨询工程师

其它课程>>



重要提醒!!内容中联系方式并非本站联系方式,报名咨询的学员请与下面最新联系方式联系我们咨询报名-以免损失!
>>长期招聘兼职招生代理人员,项目合作,团报优惠咨询,有意者请联系我们 >>咨询:13312524700(可加微信)。

昆明学历中心:◆咨询电话:0871-65385921、13312528471 赖老师、钱老师(微信报名:17787865775)点击这里给我发消息


云南地州中心:◆咨询电话:0871-65385921、17787865775 冯老师、 王老师(微信报名:17787865775)点击这里给我发消息


总部报名地址: ◆昆明市-五华区教场东路莲花财富中心10楼;网课试听:ke.xuekaocn.cn   点击这里立即咨询我们



地州分校:   大理分校   丽江分校   迪庆分校   怒江分校   红河分校   临沧分校   玉溪分校   文山分校   保山分校   德宏分校   昭通分校   普洱分校   版纳分校 【各地州学员请加老师微信咨询报名,电话(微信):133-1252-4700】;2021年云南省成人高考>>立即报名



职业技能考证:心理咨询师、健康管理师、茶艺师等更多>◆咨询电话:133 1252 4700(微信)点击这里咨询我们  

公考培训咨询:◆国考云南省考公务员/事业单位面授培训,咨询电话:133 1252 4700 (微信)点击这里立即咨询我们






温馨提示:因考试政策、内容不断变化与调整,学课在线网提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

免责声明:以上内容仅代表原创者观点,其内容未经本站证实,学课在线网对以上内容的真实性、完整性不作任何保证或承诺,转载目的在于传递更多信息,由此产生的后果与学课在线网无关;如以上转载内容不慎侵犯了您的权益,请联系我们QQ:1536696595,我们将会及时处理。




网友评论