引入
我们在c语言阶段使用的struct其实与类很相似。所以c++兼容c语言结构体struct的用法,同时升级成了类。但为了区分,我们用class来定义类,但是结果提也是可以的。
class 类名
{
//private:
//public: 访问限定符
//protected:
//成员函数
//
//
//
//成员变量
};
struct与class的区别
1.struct默认是公有访问,class默认私有访问
2.struct兼容C
类
访问限定符
public:公有的,可以在整个项目中使用。
private:私有的,只能在类中使用。
protected:保护的
类的实例化
用类类型创建对象的过程,称为类的实例化。那么类的实例化如何分配的内存呢?实例化出的对象才能实际存储数据,占用物理空间
1.对象中只有成员变量,成员函数在公共区域。
class Date
{
public:
void Init(int year=1,int month=1,int day=1)
{
_year = year;
_month = month;
_day = day;
}
void Print()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1;
d1.Init(2024, 1, 28);
d1.Print();
cout << sizeof(Date) << endl;
return 0;
}
由上图可见,编译器并没有计算成员函数的大小,只计算了成员函数的大小。
this隐含指针
this是成语函数第一个参数。
class Date
{
public:
void Init(int year = 1, int month = 1, int day = 1)
{
this->_year = year;
this->_month = month;
this->_day = day;
}
private:
int _year;
int _month;
int _day;
};
上述代码会发现,this是存在的。
this指针的特性:
1.this指针的类型:是类类型*const ,即成员函数中,不能给this指针赋值。
2.只能在成员函数内部使用。
3.this指针本质上是“成员函数”的形参,当对象调用成员函时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。
4.this指针是“成员函数”第一个隐含的指针形参。