面向对象(一)
一、面向对象含义
之前一直都说面向对象和面向过程,具体是什么含义,并不清楚,自从学习了C++课程后,才知道什么是面向对象。接下来,用图片说明实体、ADT、类和对象四者间的联系。
总结一下,整个过程就是将现实生活中存在的实体抽象成抽象数据类型,然后转换成计算机语言中的类,再通过实例化过程实例化一个对象。当然类可以实例化多个对象,而且多个对象的属性是私有的,行为确是公有的。就像是我们人来说,每个人都有各自的姓名、性别,但是所有的人都可以吃饭和睡觉。
二、 面向对象思想的三大特性:封装、继承、多态
1、封装—通过访问限定符
public:公有的,在函数任意位置都能访问
protected:受保护的,一般用于继承和派生中,作用是:子类可以访问父类的保护成员
private:私有的,只有在类中才能被访问
2、 多态分为静多态和动多态
静多态:主要用于函数重载和模板中
动多态:主要用于虚函数
继承和多态具体后面再说
3、下面看一个类:
(1)class Student
{
char *name;
int age;
};如果在类中没有说明是public还是private,则默认是private
(2)在说到类的时候,想到了结构体,那么在C++中类和结构体有什么区别呢?
在C++中,结构体默认里面的是全部可见的,相当于公有的,但是类中默认的是私有的,这就是唯一的区别。
(3)C++中的类和C语言中的结构体的区别
如果有这样一个结构体:
struct Node
{
int data;
struct Node *next;
}
在C语言中,要想定义一个节点,需要写成struct Node a;但是在C++中,写成Node a,就可以。
现在有一个空类(或者空结构体),对其求sizeof,在C语言、C++、Linux中结果会是什么呢?
C语言中:编译不通过。
C++中:结果为1,原因是:虽然创建的是空类,但是当我们要声明实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例,VS中默认空类占有一个字节大小的空间。
Linux:结果为0,不占空间。