2.15 C++常量指针this
参考: http://www.weixueyuan.net/view/6346.html
总结:
在每一个成员函数中都包含一个常量指针,我们称其为this指针,该指针指向调用本函数的对象,其值为该对象的首地址。
this指针出现在static成员函数中,编译出错。this指针只能用于非静态成员函数内。
在每一个成员函数中都包含一个常量指针,我们称其为this指针,该指针指向调用本函数的对象,其值为该对象的首地址。通过该指针,我们可以在成员函数的函数体内访问对象。其中this是C++的一个关键字。
例1:
class book
{
public:
book(){this->price = 0.0; this->title = NULL;}
private:
double price;
char * title;
};
如例1程序所示,该例向我们展示了this指针的使用方法。当然在我们在实际的程序设计中并不需要如此,这样写未免太麻烦了,例1只是做介绍this指针基本语法所用。在实际设计程序时只需要按照例2就行。
例2:
class book
{
public:
book(){price = 0.0; title = NULL;}
private:
double price;
char * title;
};
通常我们在设计成员函数时会将形参与成员变量设计成同一个名字,如例3所示,此时函数定义的时候price = price;这样的程序看起来总是有些别扭的。这个使用如果使用this指针则就能很明朗的进行区分两个price了。
例3:
void setprice(double price)
{
price = price;
}
例4:
void setprice(double price)
{
this->price = price;
}
如例4所示,利用this->price表明前面一个price为类中的成员变量,而后面一个price为形参中的price。this指针在此时避免命名冲突产生理解上的歧义。
例5:
#include<iostream>
using namespace std; class book
{
public:
book(){price = 0.0; title = NULL;}
void copy(book &b);
private:
double price;
char * title;
}; void book::copy(book &b)
{
if(this == &b)
{
cout<<"same object!"<<endl;
return;
}
else
{
price = b.price;
}
} int main()
{
book Alice;
book Harry;
Harry.copy(Alice);
Harry.copy(Harry);
return ;
}
在本例中,我们为book类新增了一个copy函数,即将book类对象拷贝给调用copy函数的对象,在函数体中,我们用this指针先判断被拷贝的对象的引用是否是调用该函数的对象自身,如果是的话则推出函数。在主函数中Harry.copy(Harry);就是拷贝自身,这样的事情当然是我们不希望看到的,因此直接退出函数。这在程序设计过程中也是一种常用的检测手段。
this指针是常量指针,它的值是不能被修改的,一切企图修改该指针的操作如赋值、递增、递减等都是不允许的。此外this指针只非static成员函数中才是有效的,这一点在我们介绍完static成员函数后大家就会明白为何会如此了,在此处暂时只要知道这一点就可以了。
例6:
class book
{
public:
book(){price = 0.0; title = NULL;}
static void setprice(double price)
{
this->price = price;//compile error
}
private:
double price;
char * title;
};
在例6中,this指针出现在static成员函数中,编译出错。this指针只能用于非静态成员函数内。
2.15 C++常量指针this的更多相关文章
- C语言基础知识点整理(函数/变量/常量/指针/数组/结构体)
函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...
- C语言学习笔记 (001) - 常量指针与指针常量的区别(转帖)
三个名词虽然非常绕嘴,不过说的非常准确.用中国话的语义分析就可以很方便地把三个概念区分开. 一) 常量指针. 常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量 ...
- 【C/C++语言】指针常量与常量指针的区别
三个名词虽然非常绕嘴,不过说的非常准确.用中国话的语义分析就可以很方便地把三个概念区分开. 一) 常量指针. 常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量 ...
- C和指针 第三章 指针常量与常量指针
c语言中声明常量的两种方式 const int value int const value 如果要声明常量的指针,即指向常量的指针,则可以参考上面的常量声明修改一下 const int *ptr in ...
- 理清C++常量指针和指针常量这团乱麻
写在前面: 与其说C++中的常量指针和指针常量是一块很有嚼头的语法糖,不如说它是一块相当难啃的骨头.其实本来没什么,这无非是const int *p与int* const p的区别, 但一涉及到起名字 ...
- c语言结构体&常指针和常量指针的区别
结构体: 关系密切但数据类型不尽相同, 常指针和常量指针的区别: char * const cp : 定义一个指向字符的指针常数,即const指针,常指针. const char* p : 定义一个指 ...
- c++ 指针常量,常量指针
当const遇到指针 一般来说,const修饰指针可以分为下面的集中情况. 描述 例子 含义 备注 const在*的左边 const int *b=&a; int const *b=& ...
- C++中指针常量和常量指针的区别
在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的. 本文即是简单描述指针常量和常量指针的区别. 常量指针 定义: 又叫 ...
- c语言 数组名是常量指针
//数组名是常量指针 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include ...
随机推荐
- TP3.2.3框架与已有模板做结合
具体实现步骤: a. 复制模板文件到View指定目录 b. 复制到css.img.js静态资源文件到系统指定目录 c. 把静态资源(css.img.js)文件的路径设置为"常量" ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 创建子网格
jQuery EasyUI 数据网格 - 创建子网格 使用数据网格(datagrid)的详细视图,用户可以展开一行来显示附加的详细信息. 任何内容都可以加载作为行详细,子网格也可以动态加载. 本教程将 ...
- jQuery -- touch事件之滑动判断(左右上下方向)
$("body").on("touchstart", function(e) { // 判断默认行为是否可以被禁用 if (e.cancelable) { // ...
- Amaze UI——slider的参数说明
<script type="text/javascript"> $(function(){ $('.am-slider').flexslider({ playAfter ...
- Spring Batch Bean 校验 API 支持
这个发布版本带来了一个新的 ValidatingItemProcessor 实现,这个实现被称为 BeanValidatingItemProcessor.能够让你使用 Bean Validation ...
- 原生JS实现瀑布流布局
瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 1.首先瀑布流所有的图片应该保持宽度一致,高 ...
- 完整的Django入门指南学习笔记1
转自[https://blog.csdn.net/qq_35554125/article/details/79462885] part 1: 前沿 教程材料一共会被分为七个部分. 此教程将从安装.开发 ...
- python3 设置滚动条
#!python3#coding=utf-8from selenium import webdriverfrom selenium.webdriver.common.by import Byimpor ...
- NIO高性能框架-Netty
一:Netty是什么 ? Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架,Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客 ...
- iOS 如何优化项目
原文 前言 在项目业务趋于稳定的时候,开发完迭代需求后,我们可能会无所适从,进入一段空白期,但是对于攻城狮来说闲暇不是件好事,所以我们可能总想学点什么,却又没有头绪.这个时候我们就可以考虑完善和优化我 ...