欢迎来到天天文库
浏览记录
ID:24261152
大小:349.00 KB
页数:54页
时间:2018-11-13
《apl03.类:深入剖析(ii)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、高级语言程序设计-2谭火彬C++1第三章类:深入剖析(II)2内容安排常量组成:对象作为类的成员友元函数和友元类this指针和动态内存分配静态类成员北京航空航天大学软件学院3thbin内容安排常量组成:对象作为类的成员友元函数和友元类this指针和动态内存分配静态类成员北京航空航天大学软件学院4thbin常量const类型修饰符:常量说明符是constant的缩写,“恒定不变”的意思,被其修饰的东西都受到强制保护,可以预防意外的变动,提高程序健壮性在变量说明语句中,const用于冻结一个变量,使其在程序中不能被修改在用const声明变量时,必须对该变量进
2、行初始化很多C++程序设计书籍建议:“Useconstwheneveryouneed”北京航空航天大学软件学院5thbinconst关键字主要使用场合1.修饰一个简单的变量2.修饰函数的输入参数3.修饰函数的返回值4.修饰类的成员函数北京航空航天大学软件学院6thbin1.修饰一个简单的变量constinta=1;intconsta=1;const可以放在类型修饰符的前面和后面,没有任何差别,功能:定义一个常量a,其值为是1constint*p1=&b;intconst*p2=&b;int*constp3=&b;功能:指向int常量的指针功能:指向in
3、t常量的指针功能:指向int变量的常量指针在常量指针(constpointer)中,“const”永远出现在“*”之后北京航空航天大学软件学院7thbinconst_cast转换常量性#includeusingstd::cout;usingstd::endl;intmain(){int*p1;constintabc=10;p1=&abc;//A编译错误p1=const_cast(&abc);//B*p1=5;cout<<"abc="<4、学院8thbin2.修饰函数的输入参数const修饰输入参数,不能修饰输出参数:输入参数采用“指针传递”,那么加const修饰可以防止意外地改动该指针,起到保护作用输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加const修饰对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。例如将voidFunc(Ta)改为voidFunc(constT&a),如类的拷贝构造函数voidstrcpy(char*strDestination,constchar*strSou5、rce);其中strSource是输入参数,strDestination是输出参数。给strSource加上const修饰后,如果函数体内的语句试图改动strSource的内容,编译器将指出错误北京航空航天大学软件学院9thbin3.修饰函数的返回值如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类型指针如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const修饰没有任何价值函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在6、类的赋值函数中,目的是为了实现链式表达;如果将赋值函数的返回值加const修饰,那么该返回值的内容不允许被改动函数:constchar*GetString(void);如下语句将出现编译错误:char*str=GetString();正确的用法是:constchar*str=GetString();北京航空航天大学软件学院10thbin4.修饰类的成员函数任何不会修改数据成员的成员函数都应该声明为const类型const关键字放在成员函数定义的最后如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误北京7、航空航天大学软件学院11thbin为时间类添加const约束classTime{public:Time(constTime&);intgetHour()const;intgetMinute()const;intgetSecond()const;voidprintUniversal()const;voidprintStandard();//???……};voidTime::printUniversal()const{cout<8、second;}北京航空航天大学软件学院12thbin使用const对象//Fi
4、学院8thbin2.修饰函数的输入参数const修饰输入参数,不能修饰输出参数:输入参数采用“指针传递”,那么加const修饰可以防止意外地改动该指针,起到保护作用输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加const修饰对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。例如将voidFunc(Ta)改为voidFunc(constT&a),如类的拷贝构造函数voidstrcpy(char*strDestination,constchar*strSou
5、rce);其中strSource是输入参数,strDestination是输出参数。给strSource加上const修饰后,如果函数体内的语句试图改动strSource的内容,编译器将指出错误北京航空航天大学软件学院9thbin3.修饰函数的返回值如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类型指针如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const修饰没有任何价值函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在
6、类的赋值函数中,目的是为了实现链式表达;如果将赋值函数的返回值加const修饰,那么该返回值的内容不允许被改动函数:constchar*GetString(void);如下语句将出现编译错误:char*str=GetString();正确的用法是:constchar*str=GetString();北京航空航天大学软件学院10thbin4.修饰类的成员函数任何不会修改数据成员的成员函数都应该声明为const类型const关键字放在成员函数定义的最后如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误北京
7、航空航天大学软件学院11thbin为时间类添加const约束classTime{public:Time(constTime&);intgetHour()const;intgetMinute()const;intgetSecond()const;voidprintUniversal()const;voidprintStandard();//???……};voidTime::printUniversal()const{cout<8、second;}北京航空航天大学软件学院12thbin使用const对象//Fi
8、second;}北京航空航天大学软件学院12thbin使用const对象//Fi
此文档下载收益归作者所有