参考书籍:《c++程序设计》张军编著 第七章,实际为笔记,哈哈
本篇文章主要讲了一些为了简化编码,节约内存,数据安全性 时,类与对象所涉及到的一些技术。并有程序加以运行验证,大多来自参考数据,自己有所添加。
1.this 指针
我们知道,class类有有函数,然后实例化的对象会对应的函数(实际上相当于调用了函数)。
比如上文提到的Clock myClock1,myClock2,各自独立存放在内存的数据区,每个内存单元互不干涉。而成员函数在代码区只有一个靠背,并且函数存放在代码区里,也就是说在物理内存上,对象的数据和处理对象的函数是分离的。
既然函数的位置是只有一个,不同对象调用函数是怎么知道其位置的呢?
为了正确找到对象的地址,系统会自动产生一个指针(tihs指针)指向当前对象。
比如调用成员函数:myClock2.setShow(); 实际上是这样的:setShow(&myClock2);
将对象myClock2的地址传给形参this指针,然后通过this指针找到相应的对象。
但是,这些系统自己都会做啊,我们学this指针有什么用呢?
问题是:当形参名与数据成员名相同时,我们为了区别,这里必须使用this指针。
比如:
void Clock:;setTime(int hour, int minute,int second)
{
this->hour=hour;
this->minute=minute;
this->second=second;
}
附录:
C++的使用中我们经常会用到.和::和:和->,在此整理一下这些常用符号的区别。
- A.B则A为对象或者结构体;
- A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;
- ::是作用域运算符,A::B表示作用域A中的名称B,A可以是名字空间、类、结构;
- :一般用来表示继承;
2.类的静态成员
全局变量在程序的整个运行期间都要占用内存空间,并带来数据安全性问题。
所以我们想节约空间,就会减少使用全局变量,比如把它写在类里面。
比如我们建个学生类,
class Student
{
public:
int num; // 学生编号
int count; //统计学生人数
}
Student student1;
c++里查看内存空间占用字节多少,是用sizeof()函数,
可是我们这样有个问题;
count是和学生这个类有关的量,一个对象决定不了这个值,它和对象们有关。
如果我们这样来存储 count,很明显 sizeof(student1)=8,对象一多,就会很占用内存。
这时候,静态成员 横空出世
class Student
{
public:
int num; // 学生编号
static int count; //统计学生人数
}
int Stident::count=0