C++浅析类与对象基础点
认识类和对象
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寄存器自动传递,不需要用户传递
到此这篇关于C++浅析类与对象基础点的文章就介绍到这了,更多相关C++类与对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C++ move()函数及priority_queue队列使用记录
move(obj)函数的功能是把obj当做右值处理,可以应用在对象的移动上,这篇文章主要介绍了C++ move()函数及priority_queue队列使用记录,需要的朋友可以参考下2023-01-01
最新评论