关于Delphi下子类调用父类虚函数的一个问题

Delphi语言的语法 Delphi是由Borland公司开发的一种高级编程语言,它实际上是Object Pascal的一个扩展版本。Delphi的设计理念是:提供一个简单易用、高效灵活的编程环境,帮助开发者快速构建高质量的Windows应用程序。Delphi语言继承了Pascal的结构化特性,同时引入了面向对象的编程(OOP)思想,使得代码的可重用性和可维护性得到了极大提升。Delphi不仅支持GUI(图形用户界面)应用程序开发,还能用于开发控制台应用程序、Web应用程序和移动应用程序。 阅读详情
NO.0标题:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:施维刚 时间:2002-9-28 15:03:12
两个Delphi class,声明如下: TFather = class public procedure ShowMe; virtual; end; TSon = class(TFather) public procedure ShowMe; override; end; ———————————————————————— 下面是实现 { TFather } procedure TFather.ShowMe; begin Showmessage('Hi , this is father!'); end; { TSon } procedure TSon.ShowMe; begin Showmessage('Hi, this is son'); end; ---------------------------------—————— 现在有这样一段程序: procedure foo; var ASon: TSon; begin ASon := TSon.Create; try {这里如何通过ASon来调用TFather中的ShowMe?} finally ASon.Free; end; end; 我想知道如何在上面程序段中注释部分调用父类TFather的ShowMe方法,C++中只要把变量强制类型转换成父类即可实现,可是我在Delphi中用TFather(ASon).ShowMe,显示的还是"Hi, this is son"。有没有高人告诉我如何通过ASon显示"Hi, this is father"?

[关注本文] [回复] [引用] [返回] [删除]

NO.1标题:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:施维刚 时间:2002-9-28 15:08:31
对这个帖子大家都有不少回文,可惜的是数据库坏掉没了.:( 那时候我就觉得C++的这种实现方式是不符合虚拟函数的理念的. 今天我和小白试了类强制转换和类虚拟函数重载,发现两者的实现效果完全一样! #include "stdafx.h" #include "iostream.h" class CF { virtual void showme()=0; }; class CA: public CF { public: int u; void showme(){ cout<<"A:"<< u=9; a=b; a->showme(); return 0; } 运行结果: b:9 证实了昨天我的看法:动态绑定函数是不随调用类而改变的, 它对于对象是不变的.

[回复] [引用] [返回] [删除]

NO.2标题:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:施维刚 时间:2002-9-28 15:10:41
// 再贴一遍我的文章, 希望能和大家一起探讨 我倒不觉得这是一个语言的问题。C++的实现不够OOP,而且我认为它的重载概念也不是很清楚。OOP语言如java、Object Pascal、C#等都有容器、列表等对象,它们不用管理对象到底是什么,只要是对象就行;再如某些算法的实现,如排序,我先定义一个抽象类 TComparableObj = class function CompareObj(Obj: TComparableObj): integer; virtual; abstract; End; (Java里面用接口比较好,Delphi的接口跟com联系太紧密,很不喜欢)然后可以针对这个类作算法实现。我不用管具体比较的是什么,也不用管它们具体是怎么比较的。 这些是老生常谈,大家耳熟能详了。但是如果类型转换后调用的函数是基类的函数实现,那么这些“老生常谈”就无法实现了。我只能为一个具体类复制一套算法函数了。 朱元琪的问题不是语言的问题,而是设计的问题。虚拟函数就是一个申明,声明此类而下将都有这个函数。而具体实现则是每个具体类自己需要管理的事。很多时候子类的实现只是父类实现的延伸,因此Delphi提供了强大的inherited关键字,这给类设计增添了很多方便,同时正如现在所见,给类概念理解造成了一丝困惑。我觉得,虚函数就需要子类完成好针对自己的实现,对于一个对象,居然要调用父类的实现,这只能说是类设计中某个错误的体现。 一个TSon的对象,用as关键词或者用赋值语句或者直接强制类型转换成父类(事实上是可以任意的类),虚拟函数等动态绑定的函数地址是不会变的,简而言之,父类们的实现找不到了。因此我觉得Delphi无法实现朱元琪的愿望了。下面这个例子简单的说明这个问题: TA = class s: string; procedure Showme; end; TB = class s: string; procedure Showme; end; // 实现如下 { TB } procedure TB.Showme; begin ShowMessage('TB: ' + s); end; { TA } procedure TA.Showme; begin ShowMessage('TA: ' + s); end; 下面是一段代码 var a: TA; b: TB; begin a := TA.Create; a.s := 'laugh'; b := TB(a); b.Showme; a.Free; end; 你觉得应该显示什么呢?是'TB: laugh'! 因为showme不是动态绑定的函数,不管对象是什么,用什么类调用就使用什么类的实现。(至于'laugh'为什么能取出来,是因此两个类的内存结构一样,如果把TA定义改一下 TA = class i: integer; s: string; procedure Showme; end; 那么显示的是'TB:',因为TB在内存中应该是string的地方现在是为零的整数,既是空字符串) 下面修改一下类定义 TF = class procedure Showme; virtual; abstract; end; TA = class(TF) s : string; procedure Showme; override; end; TB = class(TF) s: string; procedure Showme; override; end; 同样的代码,这次显示的是 'TA: laugh'! 对于动态绑定的函数,地址是不随调用类而变化的。这时候再把TA改成 TA = class(TF) i: Integer; s : string; procedure Showme; override; end; 程序显示的还是'TA: laugh'!理由同上。 注:上面说的不变、变都是以对象为参照物说的。 文档中把虚拟函数叫做动态绑定是以类为参照物说的。(因为类不知道这个函数的实现到底在哪里) 我理解的很不深刻,而且都是自己的一些见识,没参考什么权威著作,只是平时自己使用类的一些体会,可能很多地方说错了。^_^

[回复] [引用] [返回] [删除]

NO.3标题:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:苟琦 时间:2002-9-28 15:30:23
" 我想知道如何在上面程序段中注释部分调用父类TFather的ShowMe方法,C++中只要把变量强制类型转换成父类即可实现, " 在C++的里面,这样是实现不了的,正确的是 TSon* pSon = new CSon; pSon->showme() ; //i'm son; ((TFather*)pSon)->showme() ; //i'm son, too; TFather* pFather = pSon; pFather->ShowMe(); //i'm son, another time; pSon->TFather::Showme(); //i'm father!

[回复] [引用] [返回] [删除]

NO.4标题:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:施维刚 时间:2002-9-28 15:32:36
强! 嘿嘿,我的C++太弱了,根本没想到还能这么调用。 Delphi里面好像没有这样的功能 :(

[回复] [引用] [返回] [删除]

NO.5标题:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:苟琦 时间:2002-9-28 15:57:50
java里的接口的概念的实现在c++里完全可以用多重继承里的抽象基类来实现。如 IN java: class CFather interface IMother; class CSon public CFather implement IMother; IN c++; class CFather; class CMother { CMother(); virtual ~CMother() = 0; } class CSon : public CFather, public CMother; 因为java设计的目的是创造一种比C++简单,安全的语言,所以去掉了C++里的多重继承,指针,而添加了垃圾处理的机制。这当然丢掉了C++最强大的功能。对于水平中等以下的程序员指针的处理真是一场恶梦,但是对于真正体会了C++妙处的高手来说,那是一个美妙的境界。不过java(还有VB,Delphi)使得这个世界上程序员越来越多,大家可以将编程作为一种娱乐,而在以前却很少人能享受,毕竟不是每个人都可以设计系统程序。 C++里不是没有容器。因为C++是面向机器的设计,所以它已经将程序设计高度抽象,而只提供最基本的功能。标准C++里的STL库就是算法与容器的完美结合,现在还没有任何一种语言的能实现与之能媲美的库,试问,那种语言能够在不知道一组不知道是什么类型的对象情况下对他们进行排序呢?现在最新的jdk1.4里提供了Generic collection library就是为了提供类似的功能。但是效率却差远了,而且我觉得这跟java的设计思想是冲突的,因为现在的java已经越来越复杂了,跟java1.0完全不一样了。

[回复] [引用] [返回] [删除]

NO.6标题:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:朱元琪 时间:2002-9-28 17:15:57
to 苟琦: 因为语言的差异,实际上Delphi里的变量实际上就相当于C++里的指针,我在C++里的实现可以看看给小白回的帖子(在VC板块)。 to 施维刚: 我仔细考虑了一下,从道理上讲,这里应该要说到设计的问题。但是,在设计之初,很多东西你是没有办法完全考虑到的,但如果靠Refactoring有时候需要花费很多精力的,而且,如果是别人实现的类,你没法修改他的设计的情况下,你会怎么办?所以,Delphi没有提供相应的实现机制我觉得是一个遗憾。关于你开始提到的容器的问题,只有基本上只有提供模板类的语言才可能实现,比如C++。如果Delphi也要实现容器的话,只能通过单根结构或者接口来实现,但难逃类型安全的宿命。

[回复] [引用] [返回] [删除]

NO.7标题:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:施维刚 时间:2002-9-28 17:22:50
想起来程序员一篇专门讨论Code Refactoring的文章,我觉得很是感慨。 我们公司现在缺的就是时间和人手来做这些事。可以说,Refactoring在软件开发周期中占很重要的一个比重。

[回复] [引用] [返回] [删除]

NO.8标题:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:朱元琪 时间:2002-9-28 17:23:17
写了几个有意思的类,贴上来博一笑: type TMan = Class //人类 public procedure GotoWork; virtual; //上班 end; TSweetGun = Class(TMan) private procedure EatBreakfast;//吃早饭 public procedure GotoWork; override; //上班 end; procedure TSweetGun.GotoWork begin EatBreakfast; inherited; end; 上面是简单的类声明和实现,下面函数中是想说明如果Sweetgun家的锅坏了,他只好不吃早饭就上班了 procedure main var swg: TSweetGun; begin swg := TSweetGun.Create; if 锅没坏了 then swg.GotoWork;//里面调用了吃早饭过程 else if 锅坏了 then {这里如果能提供类似于C++的强制类型转换后调用父类方法的机制就好了,否则,需要更改TSweetGun类的设计,比如在GotoWork前加判断锅坏了没有的语句,由于,设计初SweetGun还没搬家,都在饭店吃的,所以不要考虑锅的问题,但如果要改设计,会设计到许多类的修改,是不是有点累?} end; 其实,在Dephi和VC里做完试验后我就知道Delphi里不能实现了,主要是贴上来引发一下讨论,呵呵。

[回复] [引用] [返回] [删除]

NO.9标题:Re:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:朱元琪 时间:2002-9-28 17:27:55
其实,做Refactoring牵涉到一个开发方法的问题,也需要开发人员在设计和编码方面的进一步的提高,所以,我觉得公司应该做一做这些方面的探讨,对大家做一些必要的培训,这样对公司的开发效率和质量都是非常有好处的。

[回复] [引用] [返回] [删除]

NO.10标题:Re:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:施维刚 时间:2002-9-28 17:30:11
我想这个TSweetGun实现的有问题。^_^ 这种代码是危险的,即TSweetGun吃早饭明明是有条件的,相对而言,去工作时绝对的,可是他确在绝对时间内无条件做了相对事情。 我想TSweetGun应该这样实现: TSweetgun = Class(TMan) private procedure EatBreakfast; // 吃早饭 public procedure GotoWork; override; // 上班 end; 实现如下 procedure TSweetgun.GotoWork; begin if TimeEnough and PosibleToEat then EatBreakfast; inherited GotoWork; end; TimeEnough和PosibleToEat则可以是TSweetGun的成员函数,也可以是全局函数。因为这两者的判断是带有普遍性的。

[回复] [引用] [返回] [删除]

NO.11标题:Re:Re:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:朱元琪 时间:2002-9-28 17:33:02
从严格意义上讲,是有危险的,但这里为了表示吃饭和后来凸现的锅的问题之间的关系,把其他的条件给省略了。

[回复] [引用] [返回] [删除]

NO.12标题:Re:Re:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:施维刚 时间:2002-9-28 17:37:25
如上实现后,外面对TSweetGun的使用就没必要管他工作前要做什么了,他只要说 swg.GotoWork。就像公司要我9点上班,这是我的接口,工作前要做什么个人的事,公司就不可涉足,不然难免局面混乱。^_^ 如果碰到这种情况,即TMan这样写了,TSweetGun也这样写了,而我又改不了那么我就这样做 TSweetGunEx = class(TSweeetGun) public procedure GotoWork; override; end; 实现如下 procedure TSweetgunEx.GotoWork; begin if TimeEnough and PosibleToEat then EatBreakfast; GotoWork; end; 如果原来的pas文件都不让我改了,TimeEnough等又是私有域的,那么我只好或参考源码或自己实现,把GotoWork写的更多一些。 呵呵,其实原则就是一个:子类管理好虚拟函数的实现。

[回复] [引用] [返回] [删除]

NO.13标题:Re:Re:Re:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:朱元琪 时间:2002-9-28 17:42:36
呵呵,继承一个类也是可以的,不过,这样你就必须要多维护一个仅仅扩充了一个功能的类了,如果在实际操作中带来了过多的维护的话,估计老板会不高兴的^-^

[回复] [引用] [返回] [删除]

NO.14标题:Re:Re:Re:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:陈绍治 时间:2002-9-28 17:42:51
两位老大,Refactoring是啥意思啊?

[回复] [引用] [返回] [删除]

NO.15标题:Re:Re:Re:Re:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:施维刚 时间:2002-9-29 9:06:16
可以翻译成代码重构 ^_^

[回复] [引用] [返回] [删除]

NO.16标题:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:施维刚 时间:2002-9-29 9:36:26
《程序员》2001-12期Refactoring有专文讨论,推荐大家一看 //DEVSERVER/王奇飞图书馆/综合/杂志/《程序员》/2001-12.pdf

[回复] [引用] [返回] [删除]

NO.17标题:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:朱元琪 时间:2002-9-29 9:37:32
faint,给小白的回帖找不到了,重贴在这里吧(原来在VC版)---------------------------- #include "stdafx.h" #include class CFather { public: virtual void ShowMe(){cout<<"Hi, this is father"< ShowMe(); CFather(*pSon).ShowMe();//强制类型转换 delete pSon; getchar(); return 0; }

[回复] [引用] [返回] [删除]

NO.18标题:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:朱元琪 时间:2002-9-29 9:50:55
Refactoring主要用在一些敏捷(Agile)开发方法里面,如XP之类,但对开发人员本身的要求比较高。对于这些方法,我觉得要求比较高,无法大规模的推广。关于这些问题的讨论,如果大家有兴趣,可以单独开个帖子讨论。说实话,虽然和施维刚有意见相左的地方,但是通过讨论可以加深很多认识的:P。其实大家的观点也是不矛盾的,施维刚主要强调完美的设计和对Delphi的积极辩护,而我主要强调从不更改设计(从而不增加开发周期)的前提下,希望Delphi能提供类似于C++的灵活变通,因为没有,所以只能遗憾了。希望大家能对这些方面的问题多作一些探讨,以期共同提高。

[回复] [引用] [返回] [删除]

NO.19标题:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:苟琦 时间:2002-9-29 9:51:11
“CFather(*pSon).ShowMe();//强制类型转换' 这不是强制类型转换。而是创建了一个CFather对象,对于vc的编译器来说它默认提供两个构造函数,一个是不带参数的,一个就是CFather(CFather&),第二个函数什么都不做,只是将源对象的内存数据全部拷贝一边而已,所以这跟虚拟函数无关。如果你打开vc的调试器会发现pSon的地址与CFather(*pSon)的this指针不一样

[回复] [引用] [返回] [删除]

NO.20标题:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:朱元琪 时间:2002-9-29 9:59:31
专门搞C++的就是牛啊:)。从实现上看是新构造了一个对象,但在我的印象中,由于和基本类型的强制类型转换的写法是一样的,所以想就是叫强制类型转换的。呵呵,改变了一个错误认识啊。:P

[回复] [引用] [返回] [删除]

NO.21标题:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:王玮 时间:2002-9-29 10:18:04
呵呵,原来跟delphi中的强制转换还是有差距的看来吃显示器的人的确是牛人啊~~

[回复] [引用] [返回] [删除]

NO.22标题:Re:Re:Re:Re:Re:朱元琪:关于Delphi下子类调用父类虚函数的一个问题作者:苟琦 时间:2002-9-29 12:52:10
经过一段hard work,我似乎明白了一点,现在提交给大家看看。发现delphi的虚拟函数表是与C++兼容的,但是跟C++有如下区别: C++里每个类都有自己的虚拟函数表,子类实现的虚拟函数与父类的实现是保存在不同的地址里的,所以C++可以有pChild->CFather::这样的操作苻。但是Delphi的实现不一样,它用子类的实现替换了父类的实现,父类的实现并没有编译进程序里。我是从如下代码里得出的结论,借用上面的TFather,TSon类。 type FunType = procedure; var son : TSon; father : TFather; pFunc : FunType; begin //父类 father:=TFather.Create; pFunc := Pointer(Pointer(integer(Pointer(father)^) + 0)^); pFunc;//调用成功,i'm father pFunc := Pointer(Pointer(integer(Pointer(father)^) + 4)^); pFunc;//调用失败,不是一个函数指针,只有一个虚拟函数 //子类 son := TSon.Create; pFunc := Pointer(Pointer(integer(Pointer(son)^) + 0)^); pFunc;//调用成功, i'm son pFunc := Pointer(Pointer(integer(Pointer(son)^) + 4)^); pFunc;//调用失败,不是一个函数指针,只有一个虚拟函数 end;

Java JNI 和 Delphi 相互調用(2)-Delphi調用Java 繼續前一篇。前幾天寫了  Java JNI 和 Delphi 相互調用(1)-JAVA調用DELPHI ,有朋友要求儘快寫“Delphi調用Java”,現在有空,就寫下去。DELPHI 調用 JAVA 的方法,作為入門也不算複雜,只是創建JVM的環境麻煩一些。進行的順序是:a.建立 JVM 環境b.創建 JAVA 環境實例c.找到 classd.找到方法e.調用方法f.結束如何得到 DELPHI 阅读详情

相关推荐

Java JNI 和 Delphi 相互調用(1)-JAVA調用DELPHI

JNI 不是什麼新技術,英文全稱是:Java Native Interface,JAVA本地化代碼接口。本地化代碼是指直接編譯成的與機器相關的二進制代碼,而不是Java字節碼之類的中間代碼。對於 JNI 的來龍去脈,不作介紹了,在 java.sun.com 有介紹,另外 BAIDU/GOOGLE 搜索,也有大把的。這裏僅僅做一個入門級的介紹和實現。JAVA發佈的是C/C++的接口文檔,DELPHI

小橙的第一播 9621

Delphi的学习笔记十一——类1

1.类成员的可见性 private //不可见 protected //派生类可见 public //可见 published //可见。用于运行时信息 automated //可见。用于兼容 2.类方法调用 inherited(继承):就是调用父类的函数。如果不带参数就是默认调用父类的同名函数;如果

想飞的鱼 520

Python4Delphi: 使用Delphi代码调用Python代码里面的类

1. 首先调用 PythonEngine1.ExecStrings 加载运行有这个 Python 类的 Python 代码;2. 使用 MainModule.类名() 的方式,直接就创建了 Python 类。在 Delphi 里面,Python 类创建的对象保存到一个 Variant 变量里面。3. 有了对象,就可以用【对象.方法()】的方式调用这个对象的方法了。这里需要注意,方法有没有参数都要加上括号。

pcplayer的博客 1565

Delphi的学习笔记十二——方法1

1.类的虚方法(virtual)和动态方法(dynamic) 方法的定义: TMyClass = class procedure Proc1(x,y: Real); virtual; //虚方法 function Fun1(x,y: Real): Real; virtual; procedure Proc2(x,y: Real); dynamic; //动态方法

kimifdw的专栏 966

Delphi 程序直接调用 Python 的函数

在这篇文章里面,我提到,一个 Python 的函数,我用 Delphi 无法直接调用它,所以我对它做了一个 Python 的包装。原因是,那是我第一次学习使用 Python4Delphi 这个控件。那时候要执行 Python 代码,我只会使用 PythonEngine1.ExecStrings(Python代码) 这样的方式。这样做,就是在 Delphi 的程序里面,加载了 Python 的环境,并在这个环境里面去执行了代码里面的可执行的部分。

pcplayer的博客 2306

PowerBuilder调用Delphi写的Dll时发生的奇怪问题。

  因项目需要,我用Delphi写了一个连接数据库把数据导出到Sql文件的dll,其中使用了TADOQuery组件。其中只有一个导出方法:function DataExport(path,ini_path:PChar):integer;   写完之后,用delphi写了一个test.exe进行测试,发现可以正常使用。之后便把这个dll交给了同事,让他在PowerBuilder中调用。同事拿过去之后

党宇航 的专栏 3955

showModalDialog模式窗口取得父窗体的值的问题

今天碰到了如何在showModalDialog子窗体取得父窗体的值的问题,并不简简单单是取值的问题,是不能在JS函数中取得父窗体的 checkbox 多选框的值 而是在 子窗体的 form表单取得 涉及到jsp URL传值的问题, 以前一直认为 URL传值 只限于 action方法的传值 , 没想到也可以直接链接到另一个JSP页面的时候传值 父窗体: //上传附件...

xkahala的专栏 240

delphi调用WEBservice

客户端程序由delphi6开发,WEB SERVICE是VS2005(C#)写的。碰到的问题很多,大都GOOGLE都可以找到答案。但有些我还是重复一下,另外我碰到的一些问题也在这里备注一下。 刚开始是在Delphi6+sp1的环境下开发客户端程序,会出现Internal e

beyondqd的专栏 6624

inherited

inherited就是调用祖先类的函数,如果不带参数就是默认调用同名函数如果带参数则表明子类中的函数个数可能比祖先类要多取其中的几个参数传过去例如祖先类有个函数 Create(AName:string);子类有个函数 Create(AName:string;AComponent:TObject);override;那么子类的Create函数内就可以这样调用祖先类:procedure TAClass...

weixin_34019144的博客 282

Delphi子类调用祖父类的虚函数.mht

Delphi子类调用祖父类的虚函数.mht

快衰落、慢衰落,平坦衰落、频率选择性衰落

目录一、大尺度衰落和小尺度衰落二、平坦衰落和频率选择性衰落1.反射墙、固定天线模型2.相干带宽和时延扩展三、快衰落和慢衰落1.反射墙、运动天线模型2.相干时间和多普勒扩展四、联系总结 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、大尺度衰落和小尺度衰落 移动无线信道的主要特征是信道强度关于时间和频率的变化,大致分两种: 大尺度衰落: .

weixin_45662974的博客 3万+

Delphi 如何调用 VC 的类的成员函数(一) --- 虚函数模式

Delphi 如何调用 VC 的类的成员函数? 比如下面 VC 的代码: class ITestObj { public: int MyAdd(int a, int b) { return a + b; } void ShowMSG() { ::Me...

dbyoung的Delphi专栏 1169

CloudCompare横截面工具实战:从点云切片到轮廓提取的完整流程

本文详细介绍了CloudCompare软件中Cross Section工具的核心功能与实战流程。从交互式裁剪框的精准操控,到包络线提取的参数设置与优化,再到内部轮廓提取及批量处理技巧,完整解析了如何从三维点云中高效提取建筑立面、隧道断面等关键轮廓信息,是点云数据处理与分析的实用指南。

weixin_29290963的博客 285

Delphi调用C++导出的类

打开VS2008创建一个dll项目(创建了一个QT Library项目),新建头文件q4dapplication.h定义纯虚类: #ifndef Q4DAPPLICATION #define Q4DAPPLICATION   class Q4DApplication   {   public:    virtual int exec() = 0;   }; #endif 新建头文

henreash的专栏 4850

DDR5中的On-Die Termination(ODT)详解:电阻值支持及其背后的秘密

DDR5支持多档ODT电阻值,范围从40Ω到480Ω,均基于240Ω标准参考电阻RZQR_{ZQ}RZQ​。不同电阻档位对应不同的信号负载和功耗需求。校准电压点关键,常用0.8×VDD进行精准调校。CA信号间ODT匹配必须严格控制,保证命令总线稳定。选择合适的ODT值是高速内存设计中不可忽视的细节。

weixin_43199439的博客 2099

YOLO系列算法改进 | C3k2改进篇 | 融合MambaOut轻量化门控架构 | 纯卷积实现超越Mamba性能的同时兼顾极致轻量化与边缘部署效率 | CVPR 2025

YOLO系列算法改进 | C3k2改进篇 | 融合MambaOut轻量化门控架构 | 纯卷积实现超越Mamba性能的同时兼顾极致轻量化与边缘部署效率 | CVPR 2025 (以YOLOv26最新目标检测模型为基础,利用C3k2_MambaOut创新模块进行改进)

2502_91881744的博客 224

一个Delphi下Abstract Error问题的处理

今天在修改一个公司项目的时候出现了Abstract Error问题,在网上查找之后发现为纯虚函数引起.但是看了代码之后,发现该类的子类的同名函数也实现了.这是什么原因呢?后来终于找了原因.T1 = Class(TObject) //这个我们假设是基类public    funct

lopper的专栏 1万+

把 SM30 用顺:从表设计到权限与传输,全面掌握 SAP Table Maintenance Generator

摘要 SAP的Table Maintenance Generator(TMG)是为配置表维护需求设计的经典工具,能够生成标准化的维护对话框(SM30)。它支持单表、维护视图(多表关联)和视图簇(导航式维护)三种维护对象类型。使用TMG前需注意三个关键设置:1)表维护权限选项;2)交付类(决定数据传输行为);3)客户端字段配置。通过SE54/SE11生成维护对话框时,需选择维护类型(一步/两步)和记录例程(控制传输)。TMG生成的对象包含函数组、屏幕和处理模块,但部分标准框架不可修改。实际应用中,可通过参数事

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 176

delphi类消息的处理机制

delphi类消息的处理机制文章不涉及windows消息循环和更复杂的技术,只从delphi类继承及类自身的消息处理分析,是自己的学习心得和体验.1.搜索类本身有没有处理该消息值的函数,如果有,则终止循环.循环次数:12.搜索父类有没有处理该消息值的函数,如果有,则终止循环.  循环次数 23.向父类继续搜索,直到object4.搜索类本身在没有默认处理函数,如果有,则终止循环

王一的专栏 923

NTN(三) Timing

这篇看下k_offset和k_mac,如38.300所述,k_offset是配置的调度偏移量,需要大于或等于service link RTT和Common TA之和;k_mac 是配置的偏移量,需要大于或等于 RP 和 gNB 之间的 RTT。 相关参数会通过RRC层NTN-config配置,其中的cellSpecificKoffset-r17和kmac-r17主要用于各种Timing场景的偏移。 kmac:如果DL和UL frame timing 在 gNB端未对齐,网络端

asd199086的博客 4828

【数据集7】全球人类住区层GHSL数据详解

全球人类住区层GHSL数据详解

WW、forever的博客 2253

Delphi 类的类 class of 用法

这个概念本来在一个关于Delphi RTTI 介绍的文档中已经说得很清楚了。但没有任何关于实际使用的介绍,在我明白了这个概念和如何使用后决定写一个使用说明以方便大家使用。 类的类在什么时候使用: 当在父类中需要创建具体的子类,但完成不知道子类是什么时。 例如: 一个Delphi Exe程序中项目文件的Application.CreateForm,跟踪下源代码就能明白,Del

blue_morning的专栏 7943

解决com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60027, active 20, maxActive 20错误

全网详细解决com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60027, active 20, maxActive 20, creating 0, createErrorCount 24的错误

念兮为美 417

【C++】为什么构造函数不能是虚函数(没有意义,不能实现多态);构造函数内能调用虚函数吗(可以,不能实现多态

文章目录一、虚析构函数二、构造函数为什么不能是虚函数?三、虚构造函数没有意义:1、首先是C++ Primer Plus 的解释:2、C++之父的解释参考 一、虚析构函数 虚析构函数是为了析构对应的对象,而不是指针指向谁就析构谁; 主要是为了多态的使用; 所以去虚函数表中找这个对象的析构函数来析构;进而析构其父类; 二、构造函数为什么不能是虚函数? 虚构造函数不是不能,而是没有意义。 首先,构造函数不被继承,构建派生类的时候,也会构建基类,虚构造没有意义; C++ 作者的解释为,虚函数为了多态设计,

多丰富下自己呀 2284

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

delphi6调用java程序,Delphi调用Java类(支持Java 6)

这两天正在做一个项目,需要使用Delphi与互联网社区网站进行对接,协议中使用了RSA加密;通过测试,Delphi的RSA算法无法与Java的RSA算法兼容,经过各种周折最终尝试了Delphi调用Java的类的方法进行RSA加密解密;这是非常令人振奋的解决方案,但是前期也遇到不少问题。在网上找到http://www.delphi-jedi.org/中的jni.pas及相关的例子,但是用的是jdk1...

weixin_35133280的博客 722

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Delphi创建COM组件并分别用Delphi和html调用该组件的简单实例

一、功能介绍及效果图 用delphi xe6 创建一个简单的COM组件,并分别测试了用delphi和HTML调用该组件的方法ShowWuXiaNames。效果图如下: 图一:在Windows中注册的COM组件 图二:Delphi调用COM组件...

longchanghua_enshi的专栏 3209

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: 谈谈explicit关键字
下一篇: VC中利用符号文件(*.pdb)跟踪程序错误
evers
博客等级 码龄24年 7粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值