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;
}