b站找到一个不错的视频
1类的引入
c语言中的结构体是将不同类型变量组合到一起
struct student
{
char name[20];
int age;
}
而在c++中,其结构体内不止可以定义变量,可以定义函数。改名叫类
1.1类的定义
定义和声明分文件放
person.h
class Person
{
pubilc://成员函数
void showInfo();
pubilc://成员变量
char* name;
int age;
};
person.cpp
void Person::showInfo()
{
std::cout<<age<<std::end;
}
1.2类的访问
1.2.1访问限定符
public
private protected
1.2.2
struct 默认为public,安全性堪忧
1.3类的实例化
类可以理解为一个房屋的图纸。规定房子有几个窗户,材料等等。
根据图纸建造房子就是实例化。
可以实例化很多对象。
person p;
p.
1.4类对象的大小
class A
{
public:
void printA
{
std::cout<<age<<std::end;
}
private:
char age;
};
类中只计算成员变量大小。sizeof(a)=1
类的成员函数放在公共代码段里。因为所有实例对象都会调用相同函数。
1.5this指针
1问题
class Date
{
pubilc:
void Setdate(int year, int month, int day)
{
_year=year;
_month=month;
_day=day;
}
private:
int _year;
int _month;
int _day;
}
int main()
{
Date d1;
Date d2;
d1.Setdate(2021,2,20);
d2.Setdate(2022,4,10);
上述代码看起来没问题,但容易忽略一个细节,类中成员函数是公用的,它怎么知道是d1而不是d2调用的它。
2this指针
用this解决这个问题。
//上述代码完整应该是这样的
class Date
{
pubilc:
void Setdate(Date* this,int year, int month, int day)
{
//生成一个类指针
this->_year=year;
this->_month=month;
this->_day=day;
}
private:
int _year;
int _month;
int _day;
}
int main()
{
Date d1;
Date d2;
d1.Setdate(&d1,2021,2,20);
d2.Setdate(&d2,2022,4,10);//实参里是类的地址