面向对象程序设计

来源:互联网 发布:跑跑卡丁车 ios源码 编辑:程序博客网 时间:2024/05/17 06:36
 

                   面向对象的程序设计

 

一,面向对象的方法与技术:

       面向对象基于对于对象概念,以对象为中心,以类和继承为构造机制,充分利用多态和动态联编提供灵活性,来认识,理解刻划客观世界和设计,构建相应的软件系统。

       面向对象技术是一种软件系统组织和结构设计的工程技术,它将对象作为软件系统结构的基本组成单元,以主体数据为中心,将数据及其上作用的操作一起封装,以标准的接口规范对外提供服务。

 

二,类和对象:

      类是对一组性质相同事物的程序描述,它由描述该类事物的共同特性的数据和处理这些数据的函数组成。

      对象是类的实例,类在程序运行时被用作样板来建立对象。对象是动态生成和动态消亡的。

     类的定义:

                 Class <类名>{

                      Private:

                            <成员表一>;

                                        Public:

                                                   <成员表二>;

                      Protected:

                                                   <成员表三>;

 

                                  };

定义完一个类,用这种类型类来说明变量,具有类类型的变量称为对象,也把对象称为类的实例。

 

三,构造函数和析构函数:

      通过构造函数实现对对象的数据成员进行初始化。

       构造函数的一般格式:

                                        Classname(形参)

                                        {……….}

                              在类外定义构造函数:

                      classnameclassname(参数表)

                                         {……….}

构造函数是类的成员函数,系统约定构造函数名必须与类名相同,构造函数提供了一种初始化函数对象的简单方法。应为构造函数是系统自动调用的,在定义构造函数时不能指定函数返回值得类型,也不能指定为void类型。可以定义多个构造函数,当定义多个构造函数时,必须满足函数重载的原则,即所带的参数个数或参数类型是不同的。

            析构函数:

                定义析构函数:classname∷~classname()

                                                        {………..}

系统通过析构函数收回对象所占用的空间,析构函数不能带有任何参数,不能有返回指,函数不能重载。

四,对象数据和函数的调用讨论:

             类的数据和函数分为三种:私有的数据和函数(private   共有的数据和函数(public   保护的数据和函数(protected

        私有成员只允许该类中的成员函数调用,共有成员能被类外的成员调用, 保护成员允许该类的成员函数存取保护成员数据,可调用保护成员函数,也允许该类的派生类的成员函数存取保护成员数据或调用保护成员函数,但其他函数不能存取该类的保护成员数据也不能调用该类的保护成员函数。

 

继承关系中的成员可见性:

   成员属性

   继承指定

  派生类中性质

  子类可见性

  Public

  Private

  protected

 

public

Public

Private

protected

   可见

   不可见

   可见

Public

  Private

  protected

 

private

 

private

可见

不可见

可见

当把一个类的构造函数或析构函数定义为保护时,这种类为抽象类。

 

 

五,多态性;

   

      1,编译时的多态性:函数的重载和运算符的重载。

 

 

           2,运行时的多态性:类的继承关系和虚函数

 

 

 函数的重载是指完成不同功能的函数可以有相同的函数名。

                 1),定义的重载函数必须有不同的参数个数或不同的参数类型。

          2),返回值不同的时不能定义为重载函数。

 

 运算符的重载:格式      返回类型    operator 运算符 (参数表);

        运算符的重载是通过函数类实现。该函数可以是类的成员函数 ,友员函数也可以                    

           是一般的函数。

 

 类的继承关系有单一继承和多重继承。

                  一个基类派生一个类的格式:

                               Class classname:<accesss> baseclassname{

                                            Public:

                         Private

                         Protected:

 

                                       };

             多重继承的格式:

 

                                      Class classname: <access> classname1,<access>classname2……

                                              {

                                                      Private:

                                                      Public:

                                                      Protected:

 

                                                };

 

 

虚函数:定义格式;  visual <type> funcname(<arglist>)

   1)虚函数只能是一个类的成员函数,当在派生类中定义了一个与虚函数同名的成员函数,并且该函数的参数个数,参数类型以及函数的返回值类型都与基类中相同,那么无论是否使用关键字visual它都成为一个虚函数。

       (2)实现多态性时必须使用基类类型的指针变量,使该指针指向不同派生类的对象,并通过调用指针所指向的许函数才能实现动态的多态性。

   3)徐函数必须是基类的成员函数,不能是友员函数,也不能死静态的成员函数。

  实质:虚函数是一种特殊的成员函数,在编译阶段,编译器不按静态类型生成调用此函数的的版本,而为他生成一个虚函数表(存放虚函数的地址)。程序运行时,会根据实际对象,查表调用相应的虚函数。

        在成员函数的实现中,当访问该对象的某一成员时, 系统自动的调用了隐含的指针this。当函数定义为虚函数时在调用该函数是根据实际的对象调用,相当于失去了this指针。

                      

 

问题:1、用new创建的一个存储空间为什么一定要用delete来删除.

             2、如何使用const

       3、一个类中的成员是这么实现不可见的

             4、同类型的对象之间可以附值,为什么可以将派生类对象附给基累,但基类不可以附给派生类.