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

业务接单网站品牌宣传推广策划方案

业务接单网站,品牌宣传推广策划方案,八宿县网站seo优化排名,了解网站开发 后台流程目录 一、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.ritt.cn/news/24386.html

相关文章:

  • CP网站开发制作H5河北网站seo策划
  • 做服装外单的网站有哪些近三年成功的营销案例
  • 自己做的网站链接百度集团总部在哪里
  • 江苏省工程建设信息官方网站搜索推广竞价托管哪家好
  • 郑州中扬科技网站建设公司怎么样长沙优化科技有限公司正规吗
  • 帮企业做网站赚钱如何建立独立网站
  • 中国建设银行英语网站首页全媒体运营师报名费多少钱
  • 阿里巴巴网站更新怎么做多层次网络营销合法吗
  • 在线资源搜索引擎整站优化 快速排名
  • 网站备案app微信怎么推广
  • 简单医院网站seo搜索是什么意思
  • 淘宝联盟做返利网站aso优化师
  • 做网站py和php微信信息流广告投放
  • 网店的网站设计方案seo优化与推广招聘
  • 万维网网站注册最全磁力搜索引擎
  • 发帖软件seo网上培训课程
  • 建设工程国检中心网站互联网营销培训平台
  • 落实网站建设培训班精神bt磁力种子
  • 网站建设和备案的顺序seo具体seo怎么优化
  • 外包加工网站可靠吗永州网络推广
  • 通过dede访问自己做的网站深圳网站制作公司
  • 宁波网站建设七米网络营销推广方式都有哪些
  • 武汉有哪些比较好的网站开发公司谷歌广告怎么投放
  • 影视网站建设要多少钱谷歌seo优化公司
  • 网站开发设计的阶段网上推广用什么平台推广最好
  • 做自媒体小视屏哪个网站好seo引擎搜索入口
  • 用dw做网站的步骤网络的推广方式有哪些
  • 南京公共工程建设中心网站网站优化关键词价格
  • 网站公司的利润在哪里网络营销论文3000字
  • 商城网站要怎样设计淘宝怎样优化关键词