C++类与对象
幻荼 人气:0认识类和对象
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成
举一个例子,如果我们要设计一个点餐平台,依照生活中的例子
那么C:商家上架商品,客户点餐,通知商家制作外卖,通知骑手配送,客户吃完点评.....(过程)
而C++:商家、客户、骑手(对象)
从这个地方就衍生出了”类”这个概念。
我们在学习C语言的时候有过创建结构体
struct Student { char name[20]; int age; char gender[20]; };
而在C++中,我们通常习惯把struct改为class,同时C++和C不同,C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数
class Person { public: void showlnfo() { cout << name << sex << age << endl; } public: char name; char sex; int age; };
而由此我们引出”访问限定符”这个概念。
访问限定符
访问限定符有三个,分别是:
public(公有)
protected(保护)
private(私有)
1. public修饰的成员在类外可以直接被访问
2. protected和private修饰的成员在类外不能直接被访问
3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止(最后一个访问限定符作用域到结尾的;为止)
4. class的默认访问权限为private,struct为public(因为struct要兼容C)
this指针
我们先看一个代码
class Date { public: void Display() { cout << _year << "-" << _month << "-" << _day << endl; } 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, d2; d1.SetDate(2018, 5, 1); d2.SetDate(2018, 7, 1); d1.Display(); d2.Display(); return 0; }
这里,我们调用了两次setDate,分别是d1和d2,那么我们怎么知道s1调用SetDate函数
时,该函数是如何知道应该设置s1对象,而不是设置s2对象呢?
这里C++就引入了this指针:即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参
数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成
拿上面的例子而言,实际上是这样的
void Display(Date* this)//实际上 { cout <<this-> _year << "-" <<this-> _month << "-" <<this-> _day << endl; }
void Display()//你看到的 { cout << _year << "-" << _month << "-" << _day << endl; }
这样编译器就自动完成区分了。
这里再列举一下this指针的性质:
1. this指针的类型:类型* const
2. 只能在“成员函数”的内部使用
3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。
4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递
加载全部内容