C++ 类与对象、this指针

将数据和操作绑在一起,并加上访问控制,这在面向对象中叫做封装。对象是数据和操作的封装体;数据描述对象的属性,操作描述对象的行为。对象是对客观事物的抽象,而类是一组具有相同属性与操作的对象的抽象。所以,对象又是类的实例。

外部程序通过类接口提供的操作访问对象中的数据,这是向对象发送消息。比如s.clear(),

C++引入了一个关键字class来定义类。class和struct稍有区别:

class的成员默认为private,而struct的成员默认为public。

范式和struct相似:

class 类名
{
public:
        公有成员声明;
private:
        私有成员声明;
protected:
        受保护成员声明;
}

面向对象的重要特性就是对象具有本体,每一个对象都有一个存储地址,即使无数据成员的对象的大小至少也是一。

union联合也可以用来定义类,默认是public,当然和c的union一样,union类的每一个成员都是从对象的首地址开始存放的,同一时间只有一个数据成员有效,我们不必深究,union已经很少见了,毕竟内存已经不值钱了。

每个对象都维护自己的数据,而成员函数定义是所有对象共享的,调用成员函数时候,怎么知道是对哪一个对象的数据进行操作呢?

举个例子来看看:

class X
{

int m;
public:
void setVal(int v) {m=v;}
void inc(int d) {m+=d;}
};

int main()
{
X a,b;
a.setVal(10);   //a.m=10
b.setVal(5);    //b.m=5
a.inc(1);   //a.m=11
b.inc(3);     //b.m=8
}

每一个成员函数都有一个隐含的参数作为接受对象的实体,成为this指针。X类的this指针类型是X*,比如你看看这个this指针就是指向a、b的。this指针是一个常量,含有当前实施调用的对象的地址,不能改变this指针的值也不可以取this指针的地址值。this指针也可以显式使用。当然,在这种情况下,可以不必使用this指针。

扫描二维码关注公众号,回复: 3049306 查看本文章

比如:

class X
{
int m;
public :
void setval(int v)
{
this->m=v;
}
.....略
}

this在成员函数中最常用于:
1.区分与局部变量重名的数据成员

2.返回当前对象

3.获取当前对象的地址。

比如在class内定义的public函数(只有一个数据成员int型的m)

void copy(const X& a)

{

if(this==&a)                     //判断是否为同一对象,相同则不用拷贝

return;

m=a.m;
}

值得一提的是,编译器一般用对象在内存中的地址作为对象的句柄,实现对象的唯一标识。因此,在判断两个对象是否相同的时候,不能比较各个属性的值,而应该比较他们的内存地址是否相等。

对于某一个类来说(我们后面会提到,就是c++的class),一般都会在public部分设置一个initialize()操作来完成对象的初始化,这是很重要的。

我们将会在下一讲介绍访问器和修改器以及友元

猜你喜欢

转载自blog.csdn.net/qq_42229034/article/details/82022196
今日推荐