目录
面向过程与面向对象
面向过程:
关注的是过程,而过程指的是:具体问题的解决方法以及将这个方式实现的步骤。
列如:洗衣服,洗衣服这个问题,它的解决方法是什么解决步骤又有哪些
面向对象:
关注的是对象更具体来说是对象与对象之间的交互,而对象指的是:根据某个场景推导出可能需要解决的一些问题,在根据这些问题建立一个又一个的对象(方法的具体实现),我们只需要利用这些对象之间的交互就可以解决这些的问题。
列如:洗衣服,衣服比较多我们选择去洗衣店里面去洗,洗衣店这个场景可能要考虑到:有顾客过来洗衣服、需要洗衣机、洗衣粉这些对象,顾客可能会无聊了、站着累了、想上厕所了、渴了,那就需要WLAN、座椅、厕所,饮水机、一次性纸杯等对象。
在顾客要洗衣服时,只需要和洗衣机、洗衣粉交互就可以了。在顾客要上厕所时也只需要和厕所这个对象交互就可以了。
顾客可能会关心,洗衣机洗的干不干净、洗的快不快,上厕所的体验好不好。但绝对不会关心,这个洗衣机的工作原理是什么,这个厕所是怎么建成的。
类的引入
面向对象语言模拟的是现实世界,类是用来模拟现实世界具体对象的,比如在外卖场景中,类就可以模拟商家、骑手、顾客。类与对象(语言中的对象)的关系就好比图纸与房子,我们可以通过图纸来建造房子,我们可以通过骑手这个类,来创建骑手这个对象。
类的定义
类与结构体的创建有点类似,类的成员可以有变量、类、函数。
class className
{
// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分
号不能省略。
注:struct同样也可以定义类,c++中将struct升级从结构体升级成了类,class和strcut的差别后面介绍。
类体中内容称为类的成员:
- 类中的变量称为成员变量
- 类中的函数称为成员函数
注意:类本质是一种自定义类型,通过类而创建的对象自然也属于变量。
成员函数的两种定义方式:
成员函数声明和定义都放在类体中,但要注意的是成员函数如果在类中定义,编译器可能会将其当成内联函数处理
class className
{
void F1()
{
printf("void F1()");
}
};
成员函数声明放在类体中定义放在类体外面,但要注意的是函数名后要加上类名和域作用限定符,以示那个类的成员函数
class className
{
void F2(int x, int y); //声明在类里面
};
void className::F2(int x, int y) //需要用域限定符告知类域
{
printf("void F2(int x, int y);"); //定义在类外
}
类的使用
类成员变量和成员函数都可以通过.操作符来访问,如果是指针的话可以通过->操作符来访问,而类的成员变量一般都是通过成员函数进行修改的。
class className
{
public: //后面介绍,它的作用是可以让类成员在类外面被访问
void initialize()
{
_a = 0;
_b = 0;
}
void print()
{
printf("%d %d",_a,_b);
}
int _a;
int _b;
};
int main()
{
className a;
a.initialize();
a.print();
className* pa = &a; //指针的方法方式
pa->_a = 10;
return 0;
}
类的访问方式和结构体一样,如果是从C语言正常过渡到c++应该很容易理解
类的实例化
用类类型创建对象的过程,称为类的实例化,实例化对象后我们可以通过对象名来访问该类的成员变量和成员函数。
但需要注意的是类只是一个“图纸”成员变量在类里面仅仅是一个声明,对象就好比用这个图纸盖的房子,只有对象实例化后成员变量才会被创建存在该对象中,对于成员函数是所有对象共有的并不存储在对象中。
访问限定符
简介
面向对象语言有三大特性:封装、继承、多态。
只谈封装:封装的本质是一种管理,可以让用户更方便也更加合理的使用类,同时也可以对数据起到保护作用。
例子:
对于一个电脑使用者来说,他不会关心内部核心部件是怎么实现的,比如主板上线路是如何布局的,CPU内部是如何设计的等。
用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此计电脑厂商在出厂时,在外部套上壳子,将内部实现细节隐藏和保护起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可
对于类也是一样,把不需要暴露给你的东西隐藏和保护起来,只留下你需要的方法接口即可。封装这个东西听起来这么牛,它是怎么实现的呢?
介绍
访问限定符的作用是对类对象进行封装,它通过访问权限选择性的将其接口暴露给外部的用户使用
访问限定符一共有三种:public(公有)、protected(保护)、private(私有)
- public修饰的成员在类外可以直接被访问
- protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
特性
- 访问权限作用范围从该访问限定符出现的位置开始直到下一个访问限定符出现时为止,如果后面没有访问限定符,作用范围就到 } 即类结束
- 如果没有访问限定符class的默认访问权限为private(私有)、struct默认是public(公有),在使用访问限定符使用时要加上:
- 访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别
使用
class className
{
public: //公有可以在类外面访问
void initialize()
{
_a = 0;
_b = 0.0;
}
private: //私有不可以在类外面访问
int _a;
double _b;
};
int main()
{
className d1;
d1.initialize();
d1._a = 10; //会编译错误
return 0;
}
struct和class的区别
在C++中struct与class都可以用来定义类,区别在于struct定义的类默认访问权限是public,class定义的类默认访问权限是private。而在继承和模板参数列表位置,struct和class也有区别。
struct A
{
int a;
};
class B
{
int a;
};
int main()
{
A d1;
B d2;
d1.a = 20;
d2.a = 20; //无法进行访问,编译错误
return 0;
}
struct关键字在c中是用来定义结构体的,在c++中被升级成了类。因为c++需要兼容c所以struct它的默认访问权限才是public,后面c++引入class关键字而c++程序员一般都喜欢用class来定义类。
总结
- c++是一款面向对象的语言,面向对象语言模拟的是现实世界,c++中的类就是用来模拟现实世界具体对象的。类与对象的关系就好比类型与变量 ,我们通过类(类型)来创建对象(变量)。
- 类的创建方式与结构体类似,class和struct都可以创建类,差别在于class默认权限是private(私有),struct的默认权限是public(公有)。
- 类成员可以有变量、函数、类等,类中的变量称为成员变量,类中的函数称为成员函数。
- 成员函数的定义可以在类中也可以在类外,在类中时会被编译器当成内联函数处理,在类外需要使用域限定符进行声明。
- 类对象成员的访问方式是.操作符,如果对象是指针的话访问方式是->操作符
- 封装的本质是一种管理,可以让用户更方便也更合理的使用类,同时也可以对数据起到保护作用。
- c++实现封装的方式是访问限定符,通过访问权限选择性的将其接口暴露给用户。访问限定符一共有三种,public修饰的成员在类外可以直接被访问,protected和private修饰的成员在类外不能直接被访问。