类,对象,封装,构造函数,析构函数

来源:互联网 发布:招在家工作淘宝客服 编辑:程序博客网 时间:2024/06/06 15:42

c++面向对象中,算法与数据结构被捆绑成一个类

对象:算法+数据结构

程序:对象+对象+.....

什么是类: 类是定义同一类所有对象的变量和方法的蓝图或原型

类是对象的抽象,而对象是类的具体实例

类是抽象的,不占内存,而对象是具体的,占内存空间,类与对象的关系好比动物与猴子的关系。

类的封装性,用来保护内部成员,外部要访问需要类定义的访问接口来进行。

在类中定义成员函数:

类中定义的成员函数一般为内联函数,即使没有明确inline标识

c++中,类定义通常在头文件中,因此这些成员函数定义也伴随着进入头文件

在类之后定义成员函数:

c++允许在其他地方定义成员函数

将类定义和其他成员函数定义分开,是目前开发程序的通常做法

我们把类定义(头文件)看成是累的外部接口,累的成员函数定义看成是类的内部实现

例如:

#include<iostream>using namespace std;class Date{    private:         //可不写,默认为privateint year;int month;int day;    public:Date(){year=2015;month=9;day=17; }     <span style="color:#ff0000;">//构造函数的重载,两种不同的赋值方法</span>Date(int x,int y):year(x),month(y),day(15){}Date(int x,int y,int z):year(x),month(y),day(z){}~Date(){}                           <span style="color:#ff0000;">//析构函数</span>void set(int x,int y,int z);       <span style="color:#ff0000;">//在类外进行函数定义</span>void show(){    cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;}};void Date::set(int x,int y,int z)      <span style="color:#ff0000;">//外部定义类函数的两种书写方法</span>{    this->year=x;    this->month=y;    this->day=z;}#if 0Date::void set(int x,int y int z){    year=x;    month=y;    day=z;}#endifint main(){    Date date1;                <span style="color:#ff0000;">//三种不同的构造函数</span>    Date date2(2012,3);    Date date3(2008,8,18);    date1.show();<span style="white-space:pre"></span><span style="color:#ff0000;">//类显示接口</span>    date2.show();    date3.show();    date3.set(2017,8,20);      <span style="color:#ff0000;">//调用类外部设置接口</span>    date3.show();    return 0;}skywalker@skywalker:~/work/test$ ./a.out 2015年9月17日2012年3月15日2008年8月18日2017年8月20日
保护成员:protected:

除了友元函数和子类的成员函数外,从类的外部就不能对它们进行访问

私有成员:private:

从累的外部就不能对其进行访问

公共成员:public:

公共成员在任何地方都可以被访问


封装的概念:

类的封装的概念首先是,数据与算法结合,构成一个不可分割的整体(对象);

其次是,在这个整体中一些成员是被保护的,它们被有效的屏蔽,以防外界的干扰和误操作;

另一些成员是公共的,它们作为接口提供外界使用,而该对象的描述即是创建用户定义的类型,对c++来说,就是类的实现机制。

封装优点:

1:重用;

2:不必关心具体的实现;

3:具有安全性。

构造函数和析构函数:

构造和析构函数,使得类对象能轻灵的创建和撤销

构造函数创建类对象,析构函数撤销类对象

构造和析构函数是类的特殊成员函数

对象的初始化:

建立对象,须有一个有意义的初始值

c++建立和初始化对象的过程专门由该类的构造函数来完成

构造函数给对象分配空间和初始化

如果一个类没有专门的构造函数,那么c++就仅仅创建对象而不做任何初始化

类的对象的初始化只能由类的成员函数来进行

建立对象的同时,自动调用构造函数

类对象的定义涉及到一个类名和一个对象名

由于类的唯一性和对象的多样性,用类名而不是对象名来作为构造函数名是比较合适的  (类名=构造函数名)

构造函数没有返回值 

对象的撤销:

析构函数完成对象的撤销

也是类的成员函数

其作用是善后处理

析构函数名,就在构造函数前加上一个一个逻辑非运算‘~’,表示逆构造函数。

0 0