指向常对象的指针变量和指向对象的常指针

1,指向常对象的指针变量
指向常对象的指针变量可以指向一个已经申明为常对象的变量,此时只能用指向常对象的指针变量指向它;也可以指向一个非常对象的变量,而此时可通过指针访问该对象,但是不能通过指针改变该对象的值。下面给出一个简单程序:

#include <iostream>

using namespace std;
class Student
{
    public:
    Student(int n,float s):num(n),score(s){}
  
   void change(int n,float s)
    {
        num = n;
        score = s;
    }
    
    void display() 
    {
        cout << num << " " << score << endl;
    }
    
   private:
    int num;
    float score;
};

int main()
{
    Student stud(29,90.5);
    Student stud1(30,60.8);
    const Student * p = &stud;
    //用一个指向常对象的指针指向非对象指针

    stud.display();
     stud.change(4,90);  //不能通过指针变量来访问对象stud,若此句改为p->change(101,80.5);则会错误


     stud.display();
    
    system("pause"); 
    return 0;
}

2,指向对象的常指针

将指向对象的指针变量申明为const型后并将之初始化,这样指针值始终保持为其初值,不能改变,也就是说它指向始终不变,但可以改变其所指向对象中数据成员的值。

#include<iostream>
using namespace std;
class  Time
{
public:  
 int hour;
 int minute;
 int sec;
 Time (int h,int m,int s):hour(h),minute(m),sec(s){}
 void reset(){
hour=00;
     minute=00;
sec=00;
 }
};
int main()
{
void fun(Time t);
Time t1(10,13,56);
Time const *p=&t1;   //如果出现Time const *p=&t1;  Time const *p=&t2;则会出错
cout<<t1.hour<<":"<<t1.minute<<":"<<t1.sec<<endl;//p只能指向t1,而不能该指t2
t1.reset();
cout<<p->hour<<":"<<p->minute<<":"<<p->sec<<endl;
return 0;
}
posted @ 2023-05-25 21:50  liuxuechao  阅读(34)  评论(0编辑  收藏  举报