首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请大家说说内联函数,构造函数,静态成员函数为什么不能为virtual函数?解决办法

2012-02-08 
请大家说说内联函数,构造函数,静态成员函数为什么不能为virtual函数?1内联函数2构造函数3静态成员函数-

请大家说说内联函数,构造函数,静态成员函数为什么不能为virtual函数?
1>   内联函数
2>   构造函数
3>   静态成员函数

---------
简单讲解下。。

[解决办法]
1> 内联函数

内联函数是在编译时期展开,而虚函数的特性是运行时才动态联编,所以两者矛盾,不能定义内联函数为虚函数


2> 构造函数

构造函数用来创建一个新的对象,而虚函数的运行是建立在对象的基础上,在构造函数执行时,对象尚未形成,所以不能将构造函数定义为虚函数


3> 静态成员函数

静态成员函数属于一个类而非某一对象,没有this指针,它无法进行对象的判别
[解决办法]
重点虚函数是运行期间确定的
[解决办法]
内联函数可以是虚函数。这个不矛盾。
另外2个是规定,没啥想多说的。
[解决办法]
virtual 意味着运行时刻确定,
但是 这些都需要在编译时刻 确定信息的,
自然就无法使用 virtual 了 ...
[解决办法]
这个可以从两个角度去理解:
1。virtual意味着在执行时期进行绑定,所以在编译时刻需确定信息的不能为virtual
构造函数需在编译时刻,因为需构造出个对象,才能执行动作,
静态成员函数不属于任何一个对象,编译时刻确定不存在执行的时候选择执行哪个的情形
内联函数,由于属于编译器的建议机制,所以可以virtual
2。virtual意味着派生类可以改写其动作
派生类的构造函数会先执行基类的构造函数而不是代基类构造函数,也就是说基类的构造函数可以看作派生类构造函数的组成,所以并不能改写这个函数
静态成员函数不属于任何一个对象,所以更不能改写其动作了
希望说清楚了
[解决办法]
inline和virtual不会同时起作用。
带virtual的函数在不需要动态绑定调用的时候,就可以inline。
[解决办法]
mark

[解决办法]
inline和virtual不会同时起作用。
带virtual的函数在不需要动态绑定调用的时候,就可以inline。
============================
对啊,因为inline属于建议机制,编译器优化时
机型选择执行
[解决办法]
这个可以从两个角度去理解:
1。virtual意味着在执行时期进行绑定,所以在编译时刻需确定信息的不能为virtual
构造函数需在编译时刻,因为需构造出个对象,才能执行动作,
静态成员函数不属于任何一个对象,编译时刻确定不存在执行的时候选择执行哪个的情形
内联函数,由于属于编译器的建议机制,所以可以virtual
2。virtual意味着派生类可以改写其动作
派生类的构造函数会先执行基类的构造函数而不是代基类构造函数,也就是说基类的构造函数可以看作派生类构造函数的组成,所以并不能改写这个函数
静态成员函数不属于任何一个对象,所以更不能改写其动作了
希望说清楚了
=========================================================================
learning...

热点排行