一、概念认知
类和对象是什么呢?初听到这个概念还不是很理解。其实类和对象可以说就是更好的模拟我们这个现实世界。
面向过程的C语言关注的是一个一个的过程,实现一个一个的函数。 那么什么是面向对象呢?就是用另类的方式去认知我们的世界。
从小到大,我们对于世界的认知就是分类的。我们不会说:哎,这有一只狗,那有一只狗。而是会说:这里有几只狗。我们会划分类别,将生划分为动物植物等,再把动物划分为猫,狗,蛇等等,然后又去划分的更加细致。所以说在计算机的发展中,我们发现面向对象的C语言有很多的不足,一个一个函数的实现也有很多不足。这时候就有了C++的类和对象。
计算机世界里,我们不再关注一个一个的个体,而是去关注一个类。但是类是我们自己划分的抽象的对某一种事物的描述,所以就有了对象,对象其实就是类的实例化,是一个一个的实体,这就是类和对象。
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
二、类的引入
首先我们要了解类。类和C语言中的结构体很像。“类” 比起“结构体” 就多了一个属性和方法,属性就是描述它自己的基本信息的数据。C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。
struct Student
{
void SetStudentInfo(const char* name, const char* gender, int age)
{
strcpy(_name, name);
strcpy(_gender, gender);
_age = age;
}
void PrintStudentInfo()
{
cout<<_name<<" "<<_gender<<" "<<_age<<endl;
}
char _name[20];
char _gender[3];
int _age;
};
int main()
{
Student s;
s.SetStudentInfo("Peter", "男", 18);
return 0;
}
C语言中,struct表示结构体,但是在C++中,struct和class都表示类,并且常用class表示。
三、类的定义
class className
{
//类体:由成员函数和成员变量组成
};//分号不能丢!
class是定义类的关键字,className是类的名字,{}中是类的主体,还有最后的分号不能丢。
类中的元素称为类的成员:类中的数据称为类的属性或者成员变量;类中的函数称为类的方法或者成员函数。
类有两种定义方式:
(1)声明和定义全部放在类体中(需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。)
//定义一个人这个类
class Person//关键字+类名
{
public:
//显示基本信息
void showinfo()
{
cout << _name << "-" << _gender << _age << endl;
}
public:
char* _name;//姓名
char* _gender;//性别
int _age;//年龄
};
(2)声明放在.h文件中,类的定义放在.cpp文件中
在这里需要注意的是:showinfo前面要加 person:: ,因为person是一个类,就像类命名空间一样,它是一个域,所以要指定showinfo是属于这个域的,也可以更好地区分它是成员函数还是普通全局函数,也方便编译器的查找该函数的实现。
一般情况下,都采取第二种方式
四、类的访问限定符
C++中,访问限定符把类的对象的属性和方法都放在了一起,让对象更加完善,通过访问权限选择性的将它的接口提供给外部的用户使用,这就叫做封装。
访问限定符主要分类以下三类:public(共有)、protected(保护)、private(私有)。保护和私有也可以归为一个类。
【说明】
1.public修饰的成员在类外可以被直接访问
2.protected和private修饰的成员在类外不能直接被访问
3.访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4.class默认访问权限为 private,struct 默认为 public
ps:class和struct的区别
C++需要兼容C语言,所以C++中struct可以当成结构体去使用。另外C++中struct还可以用来定义类。和class是定义类是一样的,区别是struct的成员默认访问方式是public,class是struct的成员默认访问方式是private。
五、封装
面向对象三大特性:封装,继承,多态
在类和对象阶段,我们只研究类的封装特性,那什么是封装呢?
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行
交互。
封装本质上是一种管理:我们如何管理兵马俑呢?比如如果什么都不管,兵马俑就被随意破坏了。那么我们
首先建了一座房子把兵马俑给封装起来。但是我们目的全封装起来,不让别人看。所以我们开放了售票通
道,可以买票突破封装在合理的监管机制下进去参观。类也是一样,我们使用类数据和方法都封装到一下。
不想给别人看到的,我们使用protected/private把成员封装起来。开放一些共有的成员函数对成员合理的访
问。所以封装本质是一种管理。