指向对象的常指针和指向常对象的指…

原创 2013年12月02日 15:34:12
1、指向对象的常指针
     把指向对象的指针变量声明为const型并将之初始化,这样指针始终保持为初值,不能改变,也就是说它的指向始终不会改变。
     定义指向对象常指针格式:  类名  * const 指针变量名 = &对象名(对象地址);

     例如:Person p("zhangsan",20),p2;   //定义对象
   Person * const p3 = &p;    //const位置在指针变量名前面,指定p3为常量。指向p1,指向不会再改变。
          p3  = &p2;   //这条语句错误,因为const修饰的变量一旦赋值,其值不会再改变。   
    在什么情况下使用指向对象的常指针呢?
        想要实现一个指针固定地与一个对象相联系也就是让这个指针始终指向一个对象,那么我们就将定义一个指向对象的常指针。这样做的好处是:在编程过程中防止误操作,增加安全性。

2、指向常对象的指针变量
       什么是指向对象的指针变量,那什么是指向常变量的指针变量?
       下面是定义了一个指向常变量的指针变量:
           const char *p;
  如何理解上边的定义?我们需要注意的是在定义指向常变量的时,const在数据类型的最左边,与数据类型紧连,表示指针变量p指向的char变量是常变量,不能通过p来改变其值。
        定义指向常变量的指针变量的一般格式:const 类型名 * 指针变量名;对指向常变量的指针变量有以下几个说明:
        1、如果一个变量被声明常变量,只能使用指向常变量的指针变量只能使用指向常变量的指针变量指向它,而不能用一般的指针变量指向它。
2、指向常变量的指针变量不仅可以指向常变量,还可以指向未被声明为常变量的变量,但是注意一点:这个指针变量不能修改该变量的值。
3、如果函数的形参是指向非const的变量指针,实参只能用非const变量的指针;如果函数的形参是指向const的变量指针,也就是说在执行的过程中不能改变指针的指向,实参用const变量的指针,或非const的指针变量。

     以上理解指向常变量的指针变量,由此来理解指向常对象的指针变量,我们要注意两点:
1、当一个对象已被声明为常对象,这时,只能使用指向常对象的指针变量来指向它。
2、当定义了一个指向常对象的指针变量,而用它指向一个非const型的的对象,不能指针该改变期指向的对象。
3、指向常对象的指针变量最常用于形参,它的好处在于保护保护形参所指向的对象在函数执行的过程中指向不会被改变。


      在此记住一条规则:当希望在调用函数时,对象的值不会被改变,就要把形参定义为指向常对象的指针变量,同时用对象的地址作为实参(对象可以使const型的也可以是非const型的)。若希望对象不仅在函数调用的过程中不会改变,也要在程序的执行过程中不会改变,那就把对象定义为const型的。
 


版权声明:本文为博主原创文章,未经博主允许不得转载。

C++中指向对象的常指针和指向常对象的指针

指向对象的常指针 将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初始值,不能改变。 Time t1(10,12,15),t2; Time * const ptr1=&...
  • QianShouYuZhiBo
  • QianShouYuZhiBo
  • 2013年09月06日 09:17
  • 1571

C++类的对象和类的指针的区别、指针和引用的区别

#include #include using namespace std; class Student { public: static int number; str...
  • liulina603
  • liulina603
  • 2015年08月05日 08:44
  • 2966

为什么要用基类指针指向派生类对象?

在基类与派生类之间,有一个规定:派生类对象的地址可以赋给指向基类对象的指针变量(简称基类指针),即基类指针也可以指向派生类对象。为什么有这一规定呢?因为它可以实现多态性【1】,即向不同的对象发送同一个...
  • FlyingBird_SXF
  • FlyingBird_SXF
  • 2014年11月21日 21:29
  • 1705

C++指向常对象的指针变量

为了更容易理解指向常对象的指针变量的概念和使用,首先了解指向常变量的指针变量,然后再进一步研究指向常对象的指针变量。下面定义了一个指向常变量的指针变量ptr:    const char *ptr; ...
  • oqqQuZi1234567
  • oqqQuZi1234567
  • 2014年12月11日 13:54
  • 831

2013级C++第6周(春)项目——对象指针、const【项目1-体验常成员函数】

/* * 程序的版权和版本声明部分 * Copyright (c)2013, 在校学生 * All rightsreserved. * 文件名称: 项目1.cpp * 作 者:刘旺 * 完成日期...
  • u012706758
  • u012706758
  • 2014年04月02日 22:01
  • 871

常(const)+ 对象 + 指针:玻璃罩到底保护哪一个

原创案例讲解——”玻璃罩const”系列的三篇文章: 1. 使用常对象——为共用数据加装一个名为const的玻璃罩 2. 常(const)+ 对象 + 指针:玻璃罩到底保护哪一个 3. 对象更...
  • sxhelijian
  • sxhelijian
  • 2012年03月23日 13:52
  • 3293

Day40、this指针和常函数、析构函数、对象的创建和销毁过程、拷贝构造和拷贝赋值(深拷贝、浅拷贝!)

一、            this和常函数 1、 this 指针 1)     类中的构造函数和成员函数都隐藏一个该类类型的指针参数,参数名为this。 2)     对于普通的成员函数,th...
  • tangzihao_c
  • tangzihao_c
  • 2016年09月24日 10:12
  • 743

区分指向对象的常指针和常对象的指针

一个C++程序来区分指向对象的常指针和常对象的指针 #include using namespace std; class Time { public: Time(int); Time...
  • jskafkashd
  • jskafkashd
  • 2016年10月12日 11:48
  • 558

C++:对象数组、对象动态申请和释放、类的定义和实现分开、this指针、常成员函数、时钟

一、对象数组的定义和初始化 1. 对象数组的创建方法:   //常量都是无名对象 1)类类型 数组名[元素个数]; 2)类类型 数组名[元素个数] = { 数组的初始化列表... }; 2. ...
  • sinat_36184075
  • sinat_36184075
  • 2017年02月02日 21:32
  • 720

指向对象的常指针变量与指向常对象的指针变量区别

1 指向对象的常指针变量与指向常对象的指针变量区别   Time * const p; //指向对象的常指针变量  p的值(p的指向)不能修改   const Time *p;  //指向常对象的...
  • sandwich125
  • sandwich125
  • 2017年01月13日 20:02
  • 376
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指向对象的常指针和指向常对象的指…
举报原因:
原因补充:

(最多只允许输入30个字)