C++——类和对象的相关知识点
一、类的定义方法
在C++中,类将成员变量和成员函数组合成一个整体。类有两种定义方式:
1.声明和定义全部放在类体中,如
class Abc
{
public:
//成员函数void Init()//初始化{_a = 0;_b = 1;_c = 2;}void Print()//打印{cout << _a << " " << _b << " " << _c << endl;}private:
//成员变量int _a;int _b;int _c;
};
2.成员函数声明和定义分开放。声明放在.h文件中,定义放在.cpp文件中。定义时要在函数名前面加上类名,明确是哪个类中的函数。
//Abc.h文件
#include <iostream>
using namespace std;class Abc
{
public:
//成员函数只写声明void Init();void Print();private:int _a;int _b;int _c;
};
//Abc.cpp文件
#include "Abc.h"void Abc::Init()
{_a = 0;_b = 1;_c = 2;
}void Abc::Print()
{cout << _a << " " << _b << " " << _c << endl;
}
二、类的访问限定符
其中,public和private是C++的类的访问限定符。被public修饰的内容在类里面和类外面都可以访问,而被private修饰的内容只能在类里面访问。如以上例子,可以通过公开的函数对类进行操作,但无法直接修改_a等成员变量,保证了数据的安全性。
在C++中,struct被升级成为类。如果类中没有指定,那么struct的默认访问权限是public,class的默认访问权限是private。
访问限定符是实现类的封装性的很重要的机制,访问限定符通过控制成员的可见范围,直接支撑了封装性中“隐藏内部细节、暴露安全接口”的目标。
而类中的成员变量其实只是一个声明,并没有在内存中开空间来存储它。所以想要使用类时,要对类进行实例化。被实例化出来的对象才占有内存空间。类似于定义出来的类只是一张房子设计图,但是纸上不能住人;而对象实例化是拿着设计图去建房子,建造出来的房子里面可以住人。
int main()
{Abc d;//对象实例化d.Init();d.Print();return 0;
}
三、this指针
对于以下代码,Init函数中并没有关于不同对象的区分,为什么初始化的结果是正确的呢,函数是如何分辨当前就是初始化d1,而不是初始化d2嘞?
class Abc
{
public:void Init(int a, int b, int c){_a = a;_b = b;_c = c;}private:int _a;int _b;int _c;
};int main()
{Abc d1;d1.Init(1, 2, 3);Abc d2;d2.Init(4, 5, 6);return 0;
}
C++中提供了this指针。它是一个隐含存在于类的非静态成员函数中的特殊指针,它指向当前调用该函数的对象。即编译器调用Init函数时,应该是这样:
void Init(int a, int b, int c)
{this->_a = a;this->_b = b;this->_c = c;
}
且C++规定,this指针不可以显示的传,但是可以在函数体内使用。