震惊!!!学了总比不学好系列~ o(* ̄▽ ̄*)ブ

Const在面向对象中的整合


在之前就整理了关于const在C++中的面向过程的一些内容,那么现在接触到了面向对象,决定再对它进行一次整合。

const是一个C++的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。另外CONST在其它编程语言中也有出现,例如Pascal、PHP5、B#.net、HC08 C、C#等。


① 指向常对象的指针变量

和之前的那篇博客的不同之处在于这里是指向常对象,之前是常变量。不过换汤不换药,既然是面向对象,那么肯定是指向常对象 (~ ̄▽ ̄)~
举个例子,如:

class Student
{
public:
	int num;
	char name[20];
	Student(int a, char b[]) :num(a) { strcpy(name, b); }; //初始化表
	void show(void)
	{
		cout << "学生信息如下:" << endl;
		cout << "学号:" << endl;
		cout << "姓名:" << endl;
	}
};

int main(void)
{
	Student s1(1003, "张三"), s2(1004, "李四"), s3(1006, "老六");
	const int* p1 = &s1.num;
	Student* const p2 = &s2;
	const Student*p3=&s3;
	return 0;
}

如上所示,这是一个含有类的面向过程的一个程序。
由于在这里要对数据成员进行指向,所以我把所有的数据成员包括成员函数全部设置成了公开。
那么对于指针变量p1:

*p1=1000;  不合法,p1指向的是常量,内容不可变,编译器会报错
p1=&s2.num;   合法,p1可以指向另一个变量,程序正常运行

另外在这里说一下:

s1.num=1000; 合法的,可以通过直接访问的方式对数据成员进行内容改变
只是说通过间接访问的方式(也就是指针)无法对数据成员进行内容改变

等等,这他妈不是指向常量的指针变量吗,怎么是指向常对象的指针变量…(* ̄(エ) ̄)
(还有常变量,即const int a = 2这样的,a就是一个常变量,a既不是常量也不是常对象,注意,这三个有点绕)

确实,p1是指向常量的指针变量,p3才是指向常对象的指针变量,不过这两者原理一样。

*p3).num=800; 不合法,不能通过指针变量来改变学号
strcpy((*p3).name,"老大"); 同样不合法,不能通过指针变量来修改姓名
p3=&s1;   合法,可以指向另一个对象,程序正常运行

同样的,与指向常量的指针变量一样,可以直接修改数据成员的值但是不能通过指针变量来修改,如果想要数据成员无法被改变则应改成:const Student s3
在指向另一个对象之后,*p3也会发生改变。

② 指向对象的常指针

如上所示,p2就是一个指向对象的常指针。

(*p2).num=999; 合法,可以通过指针变量的方式修改学号
strcpy((*p2).name,"李哥"); 合法,也可以修改姓名
p2=&s1;  不合法,不能改变指针变量的值,也就是p2的指向不可改变


③指向常对象的常指针

const Student*const p;

综合以上两者,指向常对象的常指针既不能更改指针的指向,也不能修改对象的内容。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值