C++中对封装的语法支持——this指针
时间:2019-10-28
本文章向大家介绍C++中对封装的语法支持——this指针,主要包括C++中对封装的语法支持——this指针使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
this指针
1、this概念
(1) This指针就是用于成员函数区分调用对象。
(2) This指针由编译器自动传递,无须手动传递,函数内部隐藏了this指针参数,本类类型的指针。
(3) 编译器不会为静态成员函数传递this指针。
2、this特点
1、非静态成员函数第一个隐藏参数就是this,this指向调用函数对象的常量指针,常函数。该函数不会去修改成员变量的值。
2、如果const写在函数后,const其实修饰的是this指针。如下图所示
class Person
{
public:
// Person * const this
// const Person * const this
void show() const
{
}
}
3、当形参与成员变量名冲突的时候,可以用来区分。
class Demo02
{
public:
Demo02(int a, int b)
{
this->a = a;
this->b = b;
}
Demo02& get_self()
{
return *this;
}
public:
int a;
int b;
};
4、如果一个对象被const修饰,常对象只能调用常函数。
class Demo03
{
public:
Demo03(int a, int b)
{
this->m_a = a;
this->m_b = b;
}
// 不希望这个函数修改成员变量
// 可以将成员函数设置为常函数
// 大部分的成员变量不想修改,有个别的1个变量需要被修改
// mutable 修饰的成员变量,不受常函数限制
// const 修饰成员函数,本质上修饰的是 this 指针, Demo03 * const this;
// const Demo03 * const this;
// 常对象只能调用常函数
void show() const
{
// m_a = 100;
m_b = 200;
cout << m_a << " " << m_b << endl;
}
void print()
{
cout << m_a << " " << m_b << endl;
}
public:
int m_a;
mutable int m_b;
};
void test02()
{
// 常量对象,常对象
const Demo03 d(100, 200);
// d.print();
d.show();
}
原文地址:https://www.cnblogs.com/yyslif/p/11755579.html
- POJ 3694 Network(Tarjan求割边+LCA)
- java之Cookie详解
- Ajax详解
- 1611: [Usaco2008 Feb]Meteor Shower流星雨
- 3893: [Usaco2014 Dec]Cow Jog
- 3892: [Usaco2014 Dec]Marathon
- BZOJ 2793: [Poi2012]Vouchers(调和级数)
- 3891: [Usaco2014 Dec]Piggy Back
- Java8-如何构建一个Stream
- 2016: [Usaco2010]Chocolate Eating
- javascript 闭包详解
- 3016: [Usaco2012 Nov]Clumsy Cows
- POJ 3207 Ikki's Story IV - Panda's Trick(2-SAT)
- 3359: [Usaco2004 Jan]矩形
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- DFS&BFS - 200. Number of Islands
- Backtracking - 93. Restore IP Addresses
- Backtracking - 17. Letter Combinations of a Phone Number
- Backtracking - 60. Permutation Sequence
- Backtracking - 47. Permutations II
- Backtracking - 46. Permutations
- Dynamic Programming - 377. Combination Sum IV
- Backtracking - 216. Combination Sum III
- Backtracking - 40. Combination Sum II
- Backtracking - 39. Combination Sum
- Backtracking - 77. Combinations
- Backtracking - 90. Subsets II
- Backtracking - 78. Subsets
- Tree - 331. Verify Preorder Serialization of a Binary Tree
- Tree - 95. Unique Binary Search Trees II