【C++】类和对象--日期类Date补充及流提取、流插入
const成员1.1 const修饰类的成员函数在Date日期类中我们实例化一个普通对象。而普通对象调用普通成员函数需要传参传参传给隐藏的this指针下面给出一个例子代码语言javascriptAI代码解释class Date { public: Date(int year0, int month0, int day0) { _year year; _month month; _day day; } void Print() { cout _year - _month - _day endl; } private: int _year; int _month; int _day; }; int main() { //这里实例化的是一个普通对象 Date d(2025, 8, 23); //此时d普通对象调用Print //传参给this指针 //也就是将d1的地址传给了this d1.Print(); }上面这种情况肯定是能够顺利运行的但是如果实例化一个const对象呢还能够顺利编译吗代码语言javascriptAI代码解释int main() { const Date d2(2025, 8, 23); d2.Print(); }我们发现报错了这是因为将Date实例化为const那么在调用Print()时传入的地址类型应该是const Date *但是this指针是Date的那么这个转换是不被允许的因为权限被放大了。那么我们第一反应的解决方案肯定就是将这类的this指针类型修改成const Date *但是我们学过这个this指针是由编译器自动生成的我们没有办法直接修改。所以C的设计者这样解决代码语言javascriptAI代码解释//在成员函数参数列表后面加上const修饰 //起作用就相当于void Print(const Date * const this ) //这样一来这个传参过程就能够顺利进行了 void Print() const { cout _year - _month - _day endl; }总结建议所有不修改成员变量的成员函数都加上constconst - const 权限大小不变普通 - const 权限变小是编译器允许的Q思考下面几个问题const对象可以调用非const成员函数吗非const对象可以调用const成员函数吗const成员函数内可以调用其它的非const成员函数吗非const成员函数内可以调用其它的const成员函数吗A答案不能权限被放大了能权限被缩小了不能权限被放大了能权限被缩小了2. 取地址及const取地址操作符重载前面讲到一共有6个默认成员函数我们已经学习了4个现在我们来看一看剩下两个并不是很重要默认生成的即可
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2417190.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!