• Delphi7 (第一天:类的编写)续


    program Project1;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils,
      Unit1 in 'Pas\Unit1.pas';
    
      var
        p:Person;
    begin
              p:=  Person.Create;//抽象方法一样可以实例化,但是会出现警告语句
              p.setName('Delphi作者');
              p.setAge(0);
              p.setSex('变态');
              p.speak;
              p.Destroy;//一般使用Free,Free方法对P进行判断,如果不为nil,那么就Destroy;
              Readln;
    end.
    
    
        {
    1. 接口和类的不同
    
    (1)接口中只有方法、属性,没有字段。所以接口中的属性存取都必须通过方法。
    
    (2)接口中的方法只有声明,没有实现。实现在类中完成。
    
    (3)接口中的方法没有作用域。都是公开的,但是在类中则放到不同作用域。
    
    (4)接口中的方法没有修饰字。可以认为它们都是抽象的。
    
    (5)不能创建接口实例,要使用接口,必须在类中实现,通过类调用接口的方法。
    
    (6)在类中必须声明和实现接口的所有方法。不像类继承中可以选择。
    
    (7)接口中的方法在类中实现时,可以加virtual/dynamic、abstract修饰,从而在子类中可以实现覆盖。
    {
    类从TObject继承,接口从IUnknown继承(= =! 接口也有祖先)。
               }
    //ChildInterface = interface(ParentInterface)
    //['{GUID}']
    //{方法列表}
    //end;
    
    //其中的['{GUID}'](Globally Unique Identifier,全球惟一标示)称为接口标示。
    //COM类等可以有GUID标示。这样我们可以通过GUID得到对应的接口或者COM类(实例)。
    //接口标示不是必须的。在IDE环境中,按Ctrl+Shift+G键可以产生GUID,也可以调用API函数CoCreateGuid得到
    //。如果父接口定义了标示而它的子接口没有定义,该标示不会继承到子接口,此时子接口被认为没有标示。
    //Delphi的SysUtils单元提供了GUID和String之间的转换函数StringToGUID、GUIDToString。
     //  }
    //摘自:http://blog.csdn.net/jiangwzh/article/details/7407086
    
    unit Unit1;
    
    {
      public :派生类可以直接访问基类中的public数据
      private:基类中的private不允许在派生类中访问,但是也有例外,
                若基类和子类在同一个单元文件中,则可以访问,
                若不在同一个单元文件则不能访问
      protected:基类中的protected在子类中成为private
    
    }
    interface
    type
    
       Person=class(TObject)  //继承的用法(父类)
        private
                       name:string;
                       age:Integer;
                       sex:string;
       public
               constructor create(name:string;age:Integer);overload;          //若定义两个构造函数,或者重载一个同名函数,需要使用overLoad,
                                                                              //如果子类需要覆写父类中的方法,则方法需要被virsual修饰
                                                                              //而子类中需要使用override修饰该方法或者过程
               constructor  create(name:string;age:Integer;sex:string);overload;   //构造函数
               procedure setName(name:string);
               function  getName:string;
               procedure setAge(age:Integer);
               function  getAge:Integer;
               procedure setSex(sex:string);
               function  getSex:string;
               procedure  speak;
               procedure run();virtual;abstract;       //定义抽象方法,在实现区域不能实现该抽象方法,必须由子类实现,不能在实现部分出现该过程的声明
               //destructor Destroy;overload;       //析构函数
    
    end;
    
    
    implementation
            constructor person.create(name:string;age:Integer);
            begin
                           Self.name:=name;
                           Self.age:=age;
            end;
               constructor person.create(name:string;age:Integer;sex:string);
               begin
                           Self.name:=name;
                           Self.age:=age;
                           Self.sex:=sex;
               end;
               procedure Person.setName(name:string);
               begin
                       Self.name:=name;
               end;
               function   Person.getName:string;
               begin
                      Result:= Self.name;
               end;
               procedure Person. setAge(age:Integer);
               begin
                       Self.age:=age;
               end;
               function   Person.getAge:Integer;
               begin
                       Result:=Self.age;
               end;
               procedure  Person.setSex(sex:string);
               begin
                       Self.sex:=sex;
               end;
               function   Person.getSex:string;
               begin
                       Result:=Self.sex;
               end;
               procedure person.speak;
               begin
                       Writeln('写的真慢');
               end;
    
              { destructor Person.Destroy;overload;
               begin
                            inherited Destroy;
               end;  }
    end.
    

      

  • 相关阅读:
    svn command line tag
    MDbg.exe(.NET Framework 命令行调试程序)
    Microsoft Web Deployment Tool
    sql server CI
    VS 2010 One Click Deployment Issue “Application Validation did not succeed. Unable to continue”
    mshtml
    大厂程序员站错队被架空,只拿着五折工资!苟活和离职,如何选择?
    揭秘!Windows 为什么会蓝屏?微软程序员竟说是这个原因...
    喂!千万别忘了这个C语言知识!(~0 == -1 问题)
    Linux 比 Windows 更好,谁反对?我有13个赞成理由
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3006447.html
Copyright © 2020-2023  润新知