面向对象设计

面向对象设计的三原则:封装、继承、多态。

1.封装:

        封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。

        面向对象程序设计方法的一个重要特点就是“封装性”,所谓封装性,指两个方面的含义:一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐藏其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。

例如,在抽象的基础上,我们可以将时钟的数据和功能封装起来,构成一个时钟类。

class Clock
{
public://共有成员,外部接口
void SetTime(int NewH,int NewM,int NewS);
void ShowTime();
private://私有成员,外部无法访问
int Hour,Minute,Second;
}


2.继承:

    在C++中所谓“继承”就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类”或“父类”。新建立的类称为“派生类”或“子类”。

    一个新类从已有的类那里获得其已有特性,这种现象称为类的继承。通过继承,一个新建子类从已有的父类那里获得父类的特性。从另一角度来说,从已有的类(父类)产生一个新的子类,称为类的派生。类的继承是用已有的类来建立专用类的编程技术。

    派生类继承了基类的所有数据成员和成员函数,并可以对成员作必要的增加或调整。一个基类可以派生出多个派生类,每一个派生类又可以作为基类再派生出新的派生类,因此基类和派生类是相对而言的。一代一代地派生下去,就形成类的继承层次结构

    继承性很好地解决了软件的可重用性的问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。

单继承的定义格式如下:

class<派生类名>:<继承方式><基类名>
{
<派生类新定义成员>
}

class Student
{
    public:
    void display()
    {
        cout<<"num:"<<num<<endl;
        cout<<"name:"<<name<<endl;
        cout<<"sex:"<<sex<<endl;
    }
    private:
    int num;
    string name;
    char sex;
}

class Student1:public Student
{
    public:
    void display_1()
    {
        cout<<"age:"<<age<<endl;
        cout<<"address:"<<addr<<endl;
    }
    private:
    int age;
    string addr;
}


3.多态:

    多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-黏贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

    多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行效果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

    C++中,实现多态有以下方法:虚函数,抽象类,覆盖,模板(重载和多态无关)。

    所谓虚函数,就是在基类声明函数是虚拟的,并不是实际存在的函数,然后在派生类中才正式定义此函数。

classA
{
public:
    A(){}
    virtual void foo()
    {
        cout<<"ThisisA."<<endl;
    }
};
 
classB:publicA
{
public:
    B(){}
    void foo()
    {
        cout<<"ThisisB."<<endl;
    }
};
 
int main(intargc,char*argv[])
{
    A* a = new B();
    a->foo();
    if(a != NULL)
    delete a;
    return0;
}

这将显示:This is B.

如果把virtual去掉,将显示:This is A.

前面的多态通过使用虚函数virtual void foo()来实现。


面向对象程序设计具有许多优点:

1、开发时间短,效率高,可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性,可以在应用程序中大量采用成熟的类库,从而缩短了开发时间。

2、应用程序更易于维护、更新和升级。继承和封装使得应用程序的修改带来的影响更加局部化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值