VC看了有两个月了,一点头绪都没有,请高手指点,在下500分送上!

soft2000 2001-02-16 03:31:00
什么是虚函数
::是什么意思
??
请高手指点?谢谢
...全文
2546 72 打赏 收藏 转发到动态 举报
写回复
用AI写文章
72 条回复
切换为时间正序
请发表友善的回复…
发表回复
soft2000 2001-03-02
  • 打赏
  • 举报
回复
谢谢大家!
piaoyun 2001-02-22
  • 打赏
  • 举报
回复
我来告诉你虚函数,作用是表明某个函数具有多多态性,至于什么是多态性,看看C++程序设计教程吧,大学课本。看来你也是个非计算机专业的。至于::东东上面的已经解释很清数了,同时上面的解释太高升还是先当多态性这个概念讲,暂把编译器抛开容易懂。至于学VC其实很简单,先懂SDC再学C++ 再学MFC一切很容易。甚至可也自己封装API来实现MFC功能,再看看MFC的实现过程和源码就行了。给分吧!我等着呢!
d_154569 2001-02-22
  • 打赏
  • 举报
回复
::确实是范围分解符,楼上已经说得很明白,我就不赘述。
虚函数就是用virtual声明,c++中每个类都由一张vtable(虚函数表),就是用来放需函数的入口地址的。当一个类(不一定是基类)声明一个虚函数后,编译器就为该函数在vtable中为他预留一个位置,该类的继承类的该函数都用这个入口地址。
比如a类有函数print,其继承b类也有print,你在程序中用语句
print();
调用该函数。在早绑定的编译器中,这毫无意义,因为程序在编译成执行程序时就已经确定了要调那个类的print,然而,在c++的晚绑定中就可以实现在运行时确定调那个类的函数。如果你实现了这一步,那恭喜你,你实现了c++的多态性,因为两个类的函数可以是完全不一样的。具体情况比较复杂,但原理就是这样。
d_154569 2001-02-22
  • 打赏
  • 举报
回复
::确实是范围分解符,楼上已经说得很明白,我就不赘述。
虚函数就是用virtual声明,c++中每个类都由一张vtable(虚函数表),就是用来放需函数的入口地址的。当一个类(不一定是基类)声明一个虚函数后,编译器就为该函数在vtable中为他预留一个位置,该类的继承类的该函数都用这个入口地址。
比如a类有函数print,其继承b类也有print,你在程序中用语句
print();
调用该函数。在早绑定的编译器中,这毫无意义,因为程序在编译成执行程序时就已经确定了要调那个类的print,然而,在c++的晚绑定中就可以实现在运行时确定调那个类的函数。如果你实现了这一步,那恭喜你,你实现了c++的多态性,因为两个类的函数可以是完全不一样的。具体情况比较复杂,但原理就是这样。
d_154569 2001-02-22
  • 打赏
  • 举报
回复
::确实是范围分解符,楼上已经说得很明白,我就不赘述。
虚函数就是用virtual声明,c++中每个类都由一张vtable(虚函数表),就是用来放需函数的入口地址的。当一个类(不一定是基类)声明一个虚函数后,编译器就为该函数在vtable中为他预留一个位置,该类的继承类的该函数都用这个入口地址。
比如a类有函数print,其继承b类也有print,你在程序中用语句
print();
调用该函数。在早绑定的编译器中,这毫无意义,因为程序在编译成执行程序时就已经确定了要调那个类的print,然而,在c++的晚绑定中就可以实现在运行时确定调那个类的函数。如果你实现了这一步,那恭喜你,你实现了c++的多态性,因为两个类的函数可以是完全不一样的。具体情况比较复杂,但原理就是这样。
d_154569 2001-02-22
  • 打赏
  • 举报
回复
::确实是范围分解符,楼上已经说得很明白,我就不赘述。
虚函数就是用virtual声明,c++中每个类都由一张vtable(虚函数表),就是用来放需函数的入口地址的。当一个类(不一定是基类)声明一个虚函数后,编译器就为该函数在vtable中为他预留一个位置,该类的继承类的该函数都用这个入口地址。
比如a类有虚函数print,其继承b类也有print,你在程序中用语句
print();
调用该函数。在早绑定的编译器中,这毫无意义,因为程序在编译成执行程序时就已经确定了要调那个类的print,然而,在c++的晚绑定中就可以实现在运行时确定调那个类的函数。如果你实现了这一步,那恭喜你,你实现了c++的多态性,因为两个类的函数可以是完全不一样的。具体情况比较复杂,但原理就是这样。
d_154569 2001-02-22
  • 打赏
  • 举报
回复
::确实是范围分解符,楼上已经说得很明白,我就不赘述。
虚函数就是用virtual声明,c++中每个类都由一张vtable(虚函数表),就是用来放需函数的入口地址的。当一个类(不一定是基类)声明一个虚函数后,编译器就为该函数在vtable中为他预留一个位置,该类的继承类的该函数都用这个入口地址。
比如a类有函数print,其继承b类也有print,你在程序中用语句
print();
调用该函数。在早绑定的编译器中,这毫无意义,因为程序在编译成执行程序时就已经确定了要调那个类的print,然而,在c++的晚绑定中就可以实现在运行时确定调那个类的函数。如果你实现了这一步,那恭喜你,你实现了c++的多态性,因为两个类的函数可以是完全不一样的。具体情况比较复杂,但原理就是这样。
d_154569 2001-02-22
  • 打赏
  • 举报
回复
::确实是范围分解符,楼上已经说得很明白,我就不赘述。
虚函数就是用virtual声明,c++中每个类都由一张vtable(虚函数表),就是用来放需函数的入口地址的。当一个类(不一定是基类)声明一个虚函数后,编译器就为该函数在vtable中为他预留一个位置,该类的继承类的该函数都用这个入口地址。
比如a类有函数print,其继承b类也有print,你在程序中用语句
print();
调用该函数。在早绑定的编译器中,这毫无意义,因为程序在编译成执行程序时就已经确定了要调那个类的print,然而,在c++的晚绑定中就可以实现在运行时确定调那个类的函数。如果你实现了这一步,那恭喜你,你实现了c++的多态性,因为两个类的函数可以是完全不一样的。具体情况比较复杂,但原理就是这样。
bigsail 2001-02-22
  • 打赏
  • 举报
回复
学vc 不要学mfc,要windows下的用C++ Builder吧
vc 编控制台还不错
dreambuilder 2001-02-21
  • 打赏
  • 举报
回复
TO dt()
在DOS环境没有OOP?
chengt 2001-02-21
  • 打赏
  • 举报
回复
刚开始学习windows下编程,买了许多的 xxxxxxx入门与提高,xxxxxxx成大师,xxxxxx精通
现在看来,都是一些狗屁书,不但没有帮助,而且容易误导初学者,我觉得最好的方法是:
一两本好书,
一两个项目,
一段相对充裕的时间,
一个相对独立的空间,
一台相对空闲的电脑,
几张便宜的D版光盘,
几箱方便面,

学也学习了,如果项目好的话,还能
有点money,多好。呵呵呵呵~~~~

-----个人观点---------







spdia 2001-02-21
  • 打赏
  • 举报
回复
虚函数就是对象的this指针指向的函数.
看看对象在内存中的存储方式及vtable是什么就明白了.
成员和虚函数每个对象一份靠this访问.


tlovexyj 2001-02-21
  • 打赏
  • 举报
回复
我就谈谈虚函数的应用吧。书上也是这么说的。如果要写一个图形处理的程序,通常会需要对画板上所有的图形重绘,如果事先我们定义一个CGraph类,里面声明一个virtual的方法Draw()=0,然后再从CGraph中继承出CCircle……等,各子类都必须实现自己的Draw方法,这样在程序里就只需定义一个CGraph数组,用一个 for 语句调用Draw方法就可以了。

如何找到各子类的Draw方法呢,程序维护着一个 virtual函数表,会自动调用。virtual函数可以实现也可以为0。据不同情况而言。

为什么要用virtual定义函数呢?其实用其它的方法也可以实现同样的效果,它体现的是C++的“复用性”。首先在写C++程序前要把思想从C中解脱出来。

::可以说是一个“定位符”,在它左边要是什么都没有的话,代表全局;有的话,代表::右边的函数或变量是属于左边类的。
SQ856 2001-02-21
  • 打赏
  • 举报
回复
忠告:
慢慢来,不要急
编程的事不是急的来的!!!
zhu_soft 2001-02-21
  • 打赏
  • 举报
回复
<<用 MFC 为 WINDOWS 编程》(第二版)作者 Jeff Prosise 一书为MFC编程的经典著作。不知道国内出版了没有 ,在那里可以买到。
soft2000 2001-02-20
  • 打赏
  • 举报
回复
谢谢!
我会努力的!
netflycn 2001-02-20
  • 打赏
  • 举报
回复
虚函数反映了一个类型与另一个类似类型之间的区别,只要这两个类型都是从同一个基类派生的。这种区别是通过其在基类中调用的函数的表现不同来反映的。虚函数加强了类型概念,而不是只在结构内和墙后封装代码,对于新C++程序员来说这肯定是最困难的部分之一,然而这也是理解面向对象编程的转折点,如果不用虚函数等于还不懂得OOP。
因为虚函数是与类型概念紧密联系的,而类型是面向对象程序设计的核心,所以在传统的过程语言中没有类似虚函数的东西。作为一个过程程序员,没有以往的参考可以帮助他思考虚函数,因为接触的是这个语言的其他特征。过程语言中的特征可以在算法层上理解,而虚函数只能用设计的观点理解。
对于特定的函数,为了引起晚捆绑,C++要求在基类中声明这个函数时使用virtual这个关键字。晚捆绑只对virtual起作用,而且只发生在我们使用一个基类的地址时,并且这个基类中有virtual函数,尽管它们也可以在更早的基类中定义。
为了创建一个virtual成员函数,可以简单地在这个函数声明的前面加上关键字virtual。对于这个函数的定义不要重复,在任何派生类函数重定义都不要重复它(虽然这样做无害)。如果一个函数在基类中被声明为virtual,那么在所有的派生类中它都是virtual的。在派生类中virtual函数的重定义通常被称为越位。
hihitiger 2001-02-20
  • 打赏
  • 举报
回复
《VC++技术内幕》(David J.Kruglinski)这本书入门比较好!而《深入浅出MFC》(侯俊杰)则是你进阶提升的“利刃”,但是前提是有好的C++基础噢!我也是初学VC,不过C++倒是学过!
不要放弃!
soft2000 2001-02-20
  • 打赏
  • 举报
回复
??没话了?
jack_fu 2001-02-20
  • 打赏
  • 举报
回复
推荐 think in c++ 先看一遍,用vc写点hello windows之类的小程序。如有项目更好。然后看sdk,api混着mfc作些界面的编程,(时间不定),当觉得mfc已经没什么东西时,在边看think in c++,遍研究com,atl,stl.如此反复。做好吃苦的准备,我当初也是差点看不下去。关键是多做。
加载更多回复(52)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧