第四章 基于对象的编程风格(什么是this指针)
来源:互联网 发布:网络上的怼是什么意思 编辑:程序博客网 时间:2024/06/03 21:34
this 指针的作用:
我们得设计一个copy()成员函数,才能够以triangular class object作为另一个triangular class object的初值。假设有以下两个对象:
triangular tr1(8);
triangular tr2(8,9);
调用
tr1.copy(tr2);
会将tr2的长度以及起始位置赋值给tr1.copy()必须返回被复制出来的对象。本例中,tr1不仅是复制的目标,也用来接收复制的结果。这该如何完成了?以下是一份copy的实现:
trangular&trangular::
copy(const triangular&rhs)
{
_length=rhs.length;
_beg_pos=rhs._beg_pos;
_next=rhs._beg_pos-1;
return ???//应该返回什么
};
其中rhs(right hand side)的缩写被绑定到tr2.以下这个赋值操作:
_length=rhs._length;
_length指向tr1内的成员,我们还需要一个指向整个tr1对象的方法。所谓this指针扮演了这个角色。
this指针系在member function内用来指向其调用者(一个对象)本例中,this指向tr1这是怎样办到的呢?内部工作过程是:编译器自动将每一个this指针加到每一个member fuction的参数列表,于是copy()被转换成以下形式:
//伪码(pseudo code):member function被转换后的结果
triangular&triangular::
copy(triangular*this,const triangular &rhs)
{
this->_length=rhs._length;
this->_beg_pos=rhs._beg_pos;
this->_next=rhs._beg_pos-1
};
整个转换过程还需要另一个配合:每次调用copy()都需要提供两个参数。为此,原始调用方式tr1.copy(tr2)会被转换为
//内部的程序代码转换
//tr1变成this指针所指的对象
return *this;
欲以一个对象复制出另一个对象,先确定两个对象是否相同是个好习惯。这必须再次运用this指针:
triangular& triangular::
copy(const triangular &rhs)
{
//检查两个对象是否相同
if(this!=&rhs)
{
_length=rhs._length;
_beg_pos=rhs._beg_pos;
_next=_rhs._beg_pos-1;
}
return*this;
}
- 第四章 基于对象的编程风格(什么是this指针)
- 第四章 基于对象的编程风格(什么是构造函数和析构函数)
- 第四章 基于对象的编程风格(如何实现一个class)
- 第四章 基于对象的编程风格(打造一个iterator class)
- 第四章 基于对象的编程风格何谓mutable(可变)和const(不可变)
- c++基于对象的编程风格
- c++基于对象的编程风格2
- 09基于对象编程风格
- 【第四课】面向对象编程---this的应用
- 面向对象编程风格 VS 基于对象编程风格(boost::bind/function)
- 面向对象编程风格 VS 基于对象编程风格(boost::bind/function)
- muduo2 面向对象编程风格 VS 基于对象编程风格(boost::bind/function)
- 面向对象编程风格&基于对象编程风格
- Essential C++笔记(基于对象的编程风格)
- Essential C++中文版(Chap4:基于对象的编程风格)
- 《Essential C++》笔记五、基于对象的编程风格
- C++服务器开发之基于对象的编程风格
- C++服务器开发之基于对象的编程风格
- PHP中的超全局变量
- hdoj.1503 Advanced Fruits【最长公共子序列】 2015/04/15
- How should one read a book?
- 限定$scope的范围
- php中sql语句汇总
- 第四章 基于对象的编程风格(什么是this指针)
- zoj1383Binary Numbers
- NS2导入Eclipse过程
- CART Decision Tree and two pruning theory
- 网络编程UDP的一些基本操作应用
- 必须掌握的八个【cmd 命令行】
- 写了一个用于采集爱词霸单词Java代码
- Ansible系列(8)zypper模块
- C编译器剖析_5.2.3 中间代码生成及优化_通过“偏移”访问数组元素和结构体成员