高手请进来。(50分)

K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
1)请问值参和常参有啥不同?
2)请问“覆盖“,“重定义“,“重载“在c++中有否相似的?
覆盖,重定义,重载有啥不同?
 
J

JohnsonGuo

Unregistered / Unconfirmed
GUEST, unregistred user!
值参:传递参数时,首先为该参数创建一个內存单元,并把值赋给它,然后是过程调用。
当过程完毕,编译器自动释放该参数占用內存。因此过程中可以对该变量进行
赋值而不影响过程外部的变量。
实参:传递参数时,实际上是把参数的地址传递给过程,并没有重新分配內存。对该变量
进行赋值,实际是对原变量的赋值。因此过程内部对该变量进行操作会改变变量的值。
相比较之下,实参数会比值参快。
以上两种方式是传统Pascal语法。
常参:是Object Pascal语法。在传递参数时,实际也是传递地址,但在过程中不得对该
参数进行赋值。因此常参比值参来得快。

C++中有覆盖,但没有关键字显式地表示出来。重定义也有,但也没有关键字显式地表示。
重载,在C++中做得比Object Pascal好,因为它不但可以对函数进行重载,也可以对
操作符进行重载。
 

笑傲江湖

Unregistered / Unconfirmed
GUEST, unregistred user!
基本同意以上观点.
C++的面向对象的概念和实现要比DELPHI的来的复杂的多.
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
那覆盖,重定义,重载这三者在delphi中有啥不同?
请各位说说!!
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
我是对覆盖,重定义,重载这三者的用法不大明。
重定义与c++里的一样意思吗?还有重载与c++里的也一样吗?
那覆盖有啥用?
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
大家说说话啦。。。。。
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
请问笑傲江湖:
覆盖和重载有啥不同?能具体说说吗?
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
笑傲江湖在吗?
其他人也可踊跃投稿阿!!!!
 

笑傲江湖

Unregistered / Unconfirmed
GUEST, unregistred user!
那就说啦:)
 

笑傲江湖

Unregistered / Unconfirmed
GUEST, unregistred user!
覆盖,
---在声明方法时,如果和继承于父类的相同但是没有写OVERRIDE,
(父类的同名方法要VIRTUAL/DYNAMIC),就是隐藏(覆盖)否则重载.

曾经有人在这儿对OVERLOAD和OVERRIDE咬文嚼字一番,
说一个过载一个叫重载,事实上在BORLAND的正式文档中
把这两个说法完全相同,都叫重载.

至于OVERRIDE没什么好说的.
至于OVERLOAD不是面向对象的PASCAL里的新东西,
但是在OOP里有新的使用.
见下例

Type
T1 = Class
Procedure Proc(S: string)
overload
virtual;
end;

T2 = Class(T1)
Procedure Proc(I: Integer)
reintroduce
overload;
end;

TestObj := T2.Create;
TestObj.Proc('吃了吗:)')
//CALL T1.Proc
TestObj.Proc(111)
//Call T2.Proc


关于过程、函数、方法参数的问题
补充一句:
变参(VAR)一定是采用传递引用方式,即传一个指向数据保存的那个地址的指针
而不管这种参数的数据类型是什么

值参(PASCAL默认)和常参(CONST)
到底是数值拷贝还是传引用,取决于参数类型不可一概而论。
比如字符串,肯定是传引用。
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
想再问问笑傲江湖,究竟类方法是啥?
请不吝指教.
 

笑傲江湖

Unregistered / Unconfirmed
GUEST, unregistred user!
TObject = class
constructor Create;
procedure Free;
class function InitInstance(Instance: Pointer): TObject;
procedure CleanupInstance;
function ClassType: TClass;
class function ClassName: ShortString;
class function ClassNameIs(const Name: string): Boolean;
class function ClassParent: TClass;
class function ClassInfo: Pointer;
class function InstanceSize: Longint;
class function InheritsFrom(AClass: TClass): Boolean;
class function MethodAddress(const Name: ShortString): Pointer;
class function MethodName(Address: Pointer): ShortString;
function FieldAddress(const Name: ShortString): Pointer;
function GetInterface(const IID: TGUID
out Obj): Boolean;
class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry;
class function GetInterfaceTable: PInterfaceTable;
function SafeCallException(ExceptObject: TObject;
ExceptAddr: Pointer): HResult
virtual;
procedure AfterConstruction
virtual;
procedure BeforeDestruction
virtual;
procedure Dispatch(var Message)
virtual;
procedure DefaultHandler(var Message)
virtual;
class function NewInstance: TObject
virtual;
procedure FreeInstance
virtual;
destructor Destroy
virtual;
end;


以TOBJECT为例
以上以CLASS保留字开头的就是类方法,
类方法处理的对象是类.

一般来说通过类引用或对象引用进行调用.
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
to:笑傲江湖
那类方法与普通的类中定义的方法用法上有啥不同?
请不吝指教.
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
to:笑傲江湖
OVERRIDE与覆盖的用法一样吗?
我记得在c++里OVERRIDE是叫重定义的。。。。
用法大致与你说的覆盖一样。
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
笑傲江湖在吗?
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
笑傲江湖!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 

左轻侯

Unregistered / Unconfirmed
GUEST, unregistred user!
看来我应该把那篇OOP的文章贴出来……
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
好!!!!!!!!!!!!!!!!1
先谢左轻侯了!!!!!!!
我等你!!!!!!!!!!!!!!!!!
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
左轻侯在吗?
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
左老师,HELP!!!!!!!!!!!!
 

Similar threads

回复
0
查看
662
不得闲
回复
0
查看
851
不得闲
D
回复
0
查看
691
DelphiTeacher的专栏
D
D
回复
0
查看
599
DelphiTeacher的专栏
D
D
回复
0
查看
595
DelphiTeacher的专栏
D
顶部