C++常对象、常成员函数的学习

发布时间:2017-2-25 12:35:29 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"C++常对象、常成员函数的学习",主要涉及到C++常对象、常成员函数的学习方面的内容,对于C++常对象、常成员函数的学习感兴趣的同学可以参考一下。

C++常对象、常成员函数的学习 #include "stdafx.h" #include <iostream> using namespace std; class R { private:  int r1,r2; public:  R(int r1=0,int r2=0):r1(r1),r2(r2){}//构造函数  void chang();  //void print();  void print() const;//常成员函数  void test(); }; void R::chang() {  r1=10; } /*void R::print() {  chang();  cout<<r1<<": "<<r2<<endl; }*/ void R::print() const {      //chang() 在常成员函数被调用期间目的对象都被视为常对象 常成员函数不能      //更新目的对象的数据成员,也不能针对目的对象调用该类中没有const修饰的成员函数  cout<<r1<<";"<<r2<<endl; } void R::test() {  cout<<"test success!"<<endl; } int _tmain(int argc, _TCHAR* argv[]) {  R a(4,5);//一般对象  const R b(6,7);//常对象  a.print();  a.print();//非常对象可以调用常成员函数  b.print(); // b.test();  常对象只能调用常成员函数  return 0; }  常成员函数的一些注意: 1 const是函数类型的一个组成部分所以函数的定义部分也要带上const 2 const关键字可以用于函数重载的区分 3常对象只能调用常成员函数 4常成员函数调用期间不管目的对象是否是常对象都将被视为常对象遵守常对象的规则。   常数据成员注意: 1任何函数都不能对常数据成员赋值 2构造函数对常数据成员初始化只能通过初始化列表 要想在常成员函数的调用中改变数据的值 使用mutable 关键字 eg: class Point { private: int x,y; public: Point(int x=0,int y=0):x(x),y(y){} Point(Point &p); ~Point(){}; int getx()const{return x;} int gety()const{return y;} }; Point::Point(Point &p) { x=p.x; y=p.y; } class Line { private: Point p1,p2; mutable double len;//使用mutable 修饰的len可以通过调用常函数修改 public: Line(Point &p1, Point &p2):p1(p1),p2(p2),len(-1){} double getlen () const; }; double Line::getlen() const { double a,b; if(len<0) { a =static_cast<double>(p1.getx()-p2.getx()); b =static_cast<double>(p1.gety()-p2.gety()); } len =sqrt(a*a+b*b);//修改 return len; }

上一篇:如何防止局域网内ARP攻击,可以从修改绑定自己的IP地址和Mac地址搞定
下一篇:Linux的10个核心面试问题

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。