当前位置: 首页 > news >正文

建筑工程网上预缴增值税兰州seo技术优化排名公司

建筑工程网上预缴增值税,兰州seo技术优化排名公司,WordPress密码如何修改,关闭wordpress多站点目录 一、const成员函数 1. const成员函数是什么? 2. 为什么有const成员函数? 3. 什么时候需要使用const修饰成员函数? 二、取地址运算符重载 1. 为什么需要重载取地址运算符? 2. 默认取地址运算符重载函数 3. 默认const取地址运…

目录

一、const成员函数

1. const成员函数是什么?

2. 为什么有const成员函数?

3. 什么时候需要使用const修饰成员函数? 

二、取地址运算符重载

1. 为什么需要重载取地址运算符?

2. 默认取地址运算符重载函数

3. 默认const取地址运算符重载函数

4. 什么时候要显示重载取地址运算符? 


一、const成员函数

1. const成员函数是什么?

const修饰的成员函数称为const成员函数,这个const是用来修饰隐藏的this指针的。

class B{
public:int func()const{}
};
将 const修饰的“成员函数”称之为 const成员函数,const修饰类成员函数,
实际修饰该成员函数隐含的 this指针,表明在该成员函数中不能对类的任何成员进行修改。

2. 为什么有const成员函数?

const成员函数的出现解决了两个问题:

  1. 如何保证无法通过成员函数修改成员变量?
  2. const对象无法调用非const成员函数。

1. const成员函数保证了无法通过成员函数修改成员变量


2. const成员函数能被const对象调用,不会产生权限放大问题。


3. 为什么const对象无法调用非const成员函数? 

        每个成员函数第一个参数都是隐藏的this指针,对象在调用成员函数时会将对象的地址传给这个this指针,但将const对象传给this指针就会造成权限放大问题。

        this 指针本身是 类名* const 类型的,比如Date类的this指针类型是 Date* const,这里的const在*后面,不同于const Date对象取地址后的类型:const Date* 【在*之前修饰,代表该指针指向对象的内容不能被修改(地址里的内容不能改);在*之后修饰,代表该指针指向的对象不能被修改(指向的地址不能改)】,而且const 对象只有读权限,而this指针*前没const修饰有读写权限,所以对象在调用成员函数将对象的地址传给这个this指针时,会造成权限放大问题。

3. 什么时候需要使用const修饰成员函数? 

        需要修改类中成员变量的成员函数(如专门用来修改成员变量的修改器),就不需要用const修饰。如果一个函数中不需要修改成员变量,建议加const进行修饰,因为const成员函数const对象可以调用,非const对象也可以调用。


请思考下面的几个问题:

  1. const对象可以调用非const成员函数吗?
    答案:不可以,传递this指针时权限会放大
  2. 非const对象可以调用const成员函数吗?
    答案:可以,传递this指针时权限缩小
  3. const成员函数内可以调用其它的非const成员函数吗?
    答案:不可以,传递this指针时权限会放大
  4. 非const成员函数内可以调用其它的const成员函数吗?
    答案:可以,传递this指针时权限缩小

二、取地址运算符重载

1. 为什么需要重载取地址运算符?

        在上篇文章C++ 类和对象篇(七) 运算符重载中,分析了重载运算符的原因:为了让自定义类型能使用运算符。重载取地址运算符的目的也是如此:让自定义类型也能使用取地址运算符(&)。

2. 默认取地址运算符重载函数

        类中有6个默认成员函数,其中就有默认取地址运算符重载函数,所以即使类中没有定义取地址运算符重载函数,对象依然能使用取地址运算符(&):

3. 默认const取地址运算符重载函数

        const取地址运算符重载函数也是默认成员函数,所以即使类中没有定义取地址运算符重载函数,const对象依然能使用取地址运算符(&):

4. 什么时候要显示重载取地址运算符? 

        一般不需要写,编译器生成的默认的取地址和const取地址运算符重载函数完全够用。特殊情况下,比如不想让别人获取对象的地址,就可以自己实现,返回nullptr:

如果不想让别人获取对象的地址,就可以重载取地址运算符,返回nullptr:
class A
{
public:A* operator&(){return nullptr;}const A* operator&()const{return nullptr;}
};
int main()
{A a;const A b;cout << &a << endl;cout << &b << endl;return 0;
}


------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

http://www.15wanjia.com/news/21254.html

相关文章:

  • wordpress电商平台插件seo模拟点击算法
  • 东莞app优化防疫政策
  • 苏州网站维护怎么写软文
  • 建立门户网站的步骤seogw
  • 犀牛云做网站怎么做百度怎么精准搜索
  • 网推团队seo虚拟外链
  • 秦皇岛建设路小学网站搜索引擎排名优化seo课后题
  • wordpress 重复文章广州seo公司如何
  • 电子政务 和网站建设总结长沙百度seo
  • 广东做网站公司有哪些网络营销是干嘛的
  • 昆山网站建设哪家便宜百度怎么精准搜关键词
  • 龙岗网络推广深圳网站建设优化网站技术
  • dw怎么做音乐网站营销管理培训课程
  • 优化型网站模板google手机官网
  • 洛阳做网站汉狮网络指数函数图像及性质
  • 青岛网站推广的价格福州seo公司排名
  • 免费做网站软件2003关键词点击排名软件
  • 网站如何做360优化百度知道推广软件
  • 区域网站查询搜索引擎优化seo
  • qq云 wordpress花都网络推广seo公司
  • 网站建设平台源码seo深圳优化
  • 淘宝网站网络口碑营销名词解释
  • 网站举报入口百度上做优化
  • 个人网站可以备案软件开发app制作公司
  • 大连开发区网站设计公司谷歌seo快速排名优化方法
  • 青岛网站建设开发外包seo平台
  • 衡水专业做网站自己可以做网站吗
  • 成都抖音代运营太原seo推广
  • 西安免费做网站公司成都seo优化公司排名
  • 深圳西丽网站建设公司seo网站排名