类与对象
类的定义
类似于c语言中的结构体,C++中也可以定义结构体,在结构体中除了可以定义变量,也可以定义函数体,将这种形式的结构称作类,由关键词class定义
class classname
{
//成员变量
//成员函数
};
类的访问限定
C++可以通过对访问权限将类中的对象属性封装起来,将接口提供给外部的用户使用
1.public修饰的成员可以在外部进行访问
2.private和protected修饰的则不可以在外部访问
3.class类的默认访问权限是private
4.struct同样可以定义类,struct的默认访问权限是public
类的作用域
类定义了一个新的作用域,在类体外定义成员函数需要使用::作用域解析符进行解析
例如:
class Date
{
private:
int _year;
int _month;
int _day;
public:
void showdate();//在类体中声明
};
//类体外定义需要加Date::
void Date::showdate()
{
cout << _year << endl;
cout << _month<< endl;
cout << _day<< endl;
}
this指针
C++中给每个非静态成员增加的一个隐藏的指针,该指针指向函数调用时的对象,该指针就是this指针。
class Date
{
private:
int _year;
int _month;
int _day;
public:
void SetDate(int year,int month,int day)
{
_year = year;
_month = month;
_day = day;
//该语句实际为this->_day=day;
}
void showdate();
};
void Date::showdate()
{
cout << _year <<"-"<< _month << "-" << _day << endl;
}
int main()
{
Date m;
Date n;
m.SetDate(2022,4,19);
n.SetDate(2022,4,20);
//在调用时没有传递m,n指针
m.showdate();
}
对于上述代码,m,n在调用SetDate指针时并没有传递指针变量,在如下汇编代码中,m n调用的SetDate其实是一个函数,函数的地址是一样的,是如何知道调用的是m的函数,还是n的函数呢?
在C++中,类中的成员函数都有一个隐藏的this指针,用来指向当前成员,函数体内对成员变量的访问都是通过该指针调用
1.this为实际为成员变量的形参,但在成员函数中不做声明
2.this的类型为* const类型,不能进行修改
3.this指针是由编译器通过ecx寄存器自动传递,不需要用户传递