C++中指向对象的常指针与指向常对象的指针详解

指向对象的常指针

将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初始值,不能改变。


代码如下:

Time t1(10,12,15),t2;
Time * const ptr1=&t1;
ptr1=&t2;

定义指向对象的常指针的一般形式为

类名    *    const    指针变量=对象地址;

注意应该在定义指针变量时使之初始化

指向对象的常指针变量的值不能被改变,即始终指向同一个对象,但可以改变其所指向对象中的数据成员(非const型)的值。

往往用常指针作为函数的形参,目的是不允许在函数执行过程中改变指针变量的值,使其始终指向原来的对象。如果在函数的执行过程中,修改了该形参的值,编译系统就会出现错误,给出出错信息,这样比用人工来保证形参值不被修改更可靠
指向常对象的指针

如果一个变量已经被声明成常变量,则只能用指向常变量的指针变量指向它,而不能用一般的(非const型的)指针变量指向它。


代码如下:

const int a;//定义常变量a
const int *p;//定义指向常变量的指针
p=&a;

对于对象也是如此,如果声明一个对象为常对象,则只能用指向常对象的指针指向它,而不能用一般的(非const型的)指针变量指向它。


代码如下:

const Time t1;//定义常对象
const Time *p;//定义指向常对象的指针
p=t1;

定义指向常对象的指针变量的格式

const    类名    * 指针名;

有以下几点需要注意:

(1)一个指向常对象的指针是可以指向一个非const型的对象的,但是指向的对象是不能通过指针来改变的。

而一个常对象只能由指向常对象的指针指向,具体看表:

(2)注意指向常对象的指针和指向对象的常指针的差别


代码如下:

Time * const p;//指向对象的常指针
const Time * p;//指向常对象的指针

(3)指向常对象的指针最常用于函数的形参,目的是保护形参指针所指向的对象,使他在函数执行过程中不被修改。

(4)如果定义了一个指向常对象的指针变量,是不能通过它改变所指向的对象的值的,但是指针变量本身的值是可以改变的。


代码如下:

const Time *p=&t1;//定义指向常对象的指针变量p,并指向对象t1
p=&t2;//p改为指向t2,合法

(0)

相关推荐

  • 详解C++中的this指针与常对象

    C++ this指针详解 this 是C++中的一个关键字,也是一个常量指针,指向当前对象(具体说是当前对象的首地址).通过 this,可以访问当前对象的成员变量和成员函数. 所谓当前对象,就是正在使用的对象,例如对于stu.say();,stu 就是当前对象,系统正在访问 stu 的成员函数 say(). 假设 this 指向 stu 对象,那么下面的语句中,this 就和 pStu 的值相同: Student stu; //通过Student类来创建对象 Student *pStu = &s

  • 深入理解c++常成员函数和常对象

    先明确几个概念: 1. 常对象只能调用常成员函数. 2. 普通对象可以调用全部成员函数. 3. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针. 4. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针. 5. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值: 在X类的const成员函数中,this指针的类

  • 浅析成员函数和常成员函数的调用

    在Coordinate类中,有一个Display()成员函数和一个Display() const常成员函数,代码如下 class Coordinate{ public: Coordinate(int x,int y); void Display() const; void Display(); private: int m_iX; int m_iY; }; #include <iostream> #include "Coordinate.h" using namespace

  • C++常对象精讲_const关键字的用法

    const关键字: 用const修饰的定义对象称为常对象: 用const修饰的声明成员函数称为常成员函数: 用const修饰的声明数据成员称为常数据成员. 变量或对象被 const修饰后其值不能被更新.因此被const修饰的变量或对象必须要进行初始化. 常对象说明:常对象是指对象的数据成员的值在对象被调用时不能被改变.常对象必须进行初始化,且不能被更新.不能通过常对象调用普通成员函数,但是可以通过普通对象调用常成员函数.常对象只能调用常成员函数.常对象的声明如下: const       <类名

  • C++中的常对象与常对象成员详解

    常对象 常对象必须在定义对象时就指定对象为常对象. 常对象中的数据成员为常变量且必须要有初始值,如 复制代码 代码如下: Time const t1(12,34,36); //定义t1为常对象 这样的话,在所有的场合中,对象t1中的所有数据成员的值都不能被修改.凡希望保证数据成员不被改变的对象,可以声明为常对象. 定义常对象的一般形式为 类名    const    对象名(实参列表); 也可以把const写在最左面 const    类名    对象名(实参列表); 二者等价 如果一个对象被声

  • C++类与对象深入之运算符重载与const及初始化列表详解

    目录 一:运算符重载 相等运算符重载 赋值运算符重载 小于运算符重载 二:const成员 const修饰类的成员函数 三:cin.cout重载 四:初始化列表 构造函数赋初值 初始化列表 explicit关键字 一:运算符重载 C++为了增强代码的可读性引入了运算符的重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型以及参数列表,其返回值类型与参数列表与普通函数类似. 函数名字为:关键字operator后面接需要重载的运算符符号 函数原型:返回值类型 operator操作符(参数列表)

  • Python中使用pypdf2合并、分割、加密pdf文件的代码详解

    朋友需要对一个pdf文件进行分割,在网上查了查发现这个pypdf2可以完成这些操作,所以就研究了下这个库,并做一些记录.首先pypdf2是python3版本的,在之前的2版本有一个对应pypdf库. 可以使用pip直接安装: pip install pypdf2 官方文档: pythonhosted.org/PyPDF2/ 里面主要有这几个类: PdfFileReader . 该类主要提供了对pdf文件的读操作,其构造方法为: PdfFileReader(stream, strict=True,

  • c++11 类中关于default、explict、implicit、noexcept、final的详解

    default default是c++11的标准,它的作用是告诉编译器声明一个无参的默认构造函数. 最初的时候我们声明类是这样的: class test{ public: int add(){} }; 由于我们没有给默认构造函数,c++编译器隐式的帮我们增加了一个默认的无参构造函数,注意这一点取决于编译,有的编译器不会增加,但大多数都会,如GCC.MSVC. 但是一旦我们声明了一个有参的构造函数: class test{ public: test(int a){} int add(){} };

  • IOS 开发之对象为空的判断(nil、null)详解

    IOS 开发之对象为空的判断(nil.null)详解 前言: 在开发中,会遇到很多空的情况,有时候取得对象(null),还有时候会得到<null>的情况,我们需要判断是否为空,进行return: id result; // 针对(null)这种情况 if(result == nil) return; // 针对<null>的情况 if([result isEqual:[NSNull null]]) return; 前者的判断,我们用的比较频繁,但后者,用的比较少,一般赋值给nil之

  • 基于Java class对象说明、Java 静态变量声明和赋值说明(详解)

    先看下JDK中的说明: java.lang.Object java.lang.Class<T> Instances of the class Class represent classes and interfaces in a running Java application. An enum is a kind of class and an annotation is a kind of interface. Every array also belongs to a class tha

  • 判断python对象是否可调用的三种方式及其区别详解

    查找资料,基本上判断python对象是否为可调用的函数,有三种方法 使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False一定不可调用. 官方文档:https://docs.python.org/3/library/functions.html?highlight=callable#callable 判断对象类型是否是FunctionType type(func) is FunctionType # 或者 isinst

  • Java中Spring Boot+Socket实现与html页面的长连接实例详解

    Spring Boot+Socket实现与html页面的长连接,客户端给服务器端发消息,服务器给客户端轮询发送消息,附案例源码 功能介绍 客户端给所有在线用户发送消息客户端给指定在线用户发送消息服务器给客户端发送消息(轮询方式) 注意:socket只是实现一些简单的功能,具体的还需根据自身情况,代码稍微改造下 项目搭建 项目结构图 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xml

  • Mapstruct对象插入数据库某个字段总是为空的bug详解

    目录 前言 如何调试Maven插件 源码解析 前言 在一次需求的开发过程中,发现一个对象插入数据库时某个字段总是为空. 版本:lombok:1.18.24.mapstruct:1.5.2.Final 简化后的代码如下: @Autowired private PersonService personService; public void test1(){ Person person = personService.findById(1L); PersonDto personDto = Perso

  • JS中artdialog弹出框控件之提交表单思路详解

    artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口. 前言: 自适应内容 artDialog的特殊UI框架能够适应内容变化,甚至连外部程序动态插入的内容它仍然能自适应,因此你不必去考虑消息内容尺寸使用它.它的消息容器甚至能够根据宽度让文本居中或居左对齐--这一切全是XHTML+CSS原生实现. 完善的接口 它的接口完善,可以轻易与外部程序配合使用.如异步写入消息.控制位置.尺寸.显示与隐藏.关闭等. 细致的体验 如果不是在输入状态,它支持Esc快捷键关

  • Linux ftp 命令行中下载文件get与上传文件put的命令应用详解

    介绍:从本地以用户anok登录的机器192.168.0.16上通过ftp远程登录到192.168.0.6的ftp服务器上,登录用户名是peo.以下为使用该连接做的实验. 查看远程ftp服务器上用户peo相应目录下的文件所使用的命令为:ls,登录到ftp后在ftp命令提示符下查看本地机器用户anok相应目录下文件的命令是:!ls.查询ftp命令可在提示符下输入:?,然后回车. 1.从远程ftp服务器下载文件的命令格式: get  远程ftp服务器上当前目录下要下载的文件名  [下载到本地机器上当前

随机推荐