类和对象
1、类和对象
类,即类别:是具有相似属性和行为的一组实列的集合
对象,计算机中,类的实例就是对象
类更像是一个集合,比如鸟类、人类等
对象就是集合中的元素,比如鸟类:麻雀、斑鸠;人类:张三、李四…上面说:“类是相似属性和行为的一组实例的结合”。
拿人类举例:姓名、年龄……是他们都有的属性
吃饭、睡觉……是他们都有的行为
2、面向对象
面向对象(OOP)是软件开发方法,一种编程范式。
- 面向过程:分析出解决问题所需的步骤,然后用函数把这些步骤一步一步实现,使用时一个一个依次调用就可以了。
- 面向对象:是把构成问题事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。
四大特征(面试可能会问)
面向对象主要有四大特征:抽象、封装、继承、多态。
**抽象:**把事物具有的属性和行为(共同特征)总结提纳出来
**封装:**把这些属性和行为写成一个类,同时,把这些数据信息和访问、修改这些数据信息的方法结合起来;让使用者只能用你写的特定的函数方式去访问这些数据信息;起到把数据信息隐藏起来的效果。
**继承:**继承是从已有的类的信息中创建新的类,同时继承也是封装程序中可变因素的重要手段。子类继承父类属性(静态特征)和方法(动态特征),继承必须遵循封装当中的控制访问
**多态:**多态是指允许不同类的对象对同一消息做出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活/抽象/行为共享/代码共享的优势,很好的解决了应用程序函数同名问题。总的来说,方法的重写,重载与动态链接构成多态性。
动态链接 -->对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将调用子类中的这个方法,这就是动态链接。
3、类的创建
在C语言中,我们会用到struct(C++也可以用)
C++中。我们通常会用class来创建类
我理解的创建一个类,就是定义一个结构体,把表示同一个事物的东西定义在一起
类中除了可以定义成员变量(属性)之外,还可以定义成员函数(方法),类还可以设置访问权限,可以控制类中的成员在何处能访问。
三个访问权限限定符:用来设置成员变量和成员函数的访问属性。
- public:公有成员,它们允许被本类或其它类的成员函数(通过对象)访问或调用,是类的外部接口,成员函数一般定义为public属性;
- private:私有成员,它们只允许被本类的成员函数访问,数据成员一般定义为private属性;
- protected:保护成员,它们允许被本类的成员函数和派生类的成员函数访问或调用。
关于class和struct
class:默认为是私有的(类外部不可访问)
struct:默认为是公有的(类外部也可访问)
#include<iostream>
using namespace std;
/*
*Girl 女孩
*1、抽象:
* 1.1数据(属性、成员变量):年龄、姓名、性别、三围、身高……
* 1.2行为(方法、成员变量):打扮、吃饭、睡觉……
* 2、封装:把数据和行为组织在一起 用结构体进行封装
*/
//struct 定义的类默认是公有的
//class定义的类默认是私有的(要访问得,加上public)
/*
权限访问限定符:指定成员在外部能不能被访问
public(公有):在所有得地方都能被访问(自己、类外、子类)
private(私有):只能在自己得内部被访问
protected(保护):只能在自己的内部或者子类的内部被访问
*/
class Girl //C++不需要取别名
{
private:
//成员变量
/*命名规则1、在每个成员变量的前面加上m_前缀
2、在每个成员变量后面加上_ */
int m_age;
char name_[10];
public:
//成员函数
void init(int age, const char* name)
{
m_age = age;
strcpy(name_, name);
}
void print()
{
cout<<m_age << " " << name_<< endl;
}
};
int main()
{
Girl girl;
girl.init(18, "aqua");
//cout << girl.age << endl; 私有的,不能直接访问信息
girl.print(); //只能通过限定的方式访问信息
}
4、类的定义和成员函数定义分离
一般将类的定义放在头文件(.h) 中,类的实现放在源文件(.cpp) 中,而main主函数可以放在另一个源文件中。
何谓分离?即把函数的定义放在类的外部实现!
成员函数的定义方式与其他函数的定义方式基本相同,但必须在成员函数名前面加上类名和作用域限定符(简称域运算符)
即:类名::函数名