【发布时间】:2015-06-13 01:14:49
【问题描述】:
在下面的代码中,我们有两个类,每个类都有两个方法:一个是虚拟的,第二个是非虚拟的。我不明白当我运行这段代码时到底发生了什么。在哪种情况下,系统使用哪个功能(1,2,3)使用虚拟功能或非虚拟功能?对于所有情况,我在 cmets 中写入了代码运行时获得的内容。我有点困惑......提前谢谢
class cFather {
public:
void print( ) { cout<<” 1) cFather\n”;}
virtual void print( ) const { cout<<” 2) cFather\n”};
};
class cSon : public cFather {
public:
virtual void print( ) { cout<<” 3) der\n”; }
void print( ) const { cout<<” 4) der\n”; }
};
void function1 (const cFather& o)
{
o.print( );
}
void function2 (const cFather o)
{
o.print( );
}
void function3(cFather o)
{
o.print( );
}
一)
void main ( )
{ cFather o;
function3(o); }
// 1) CFather
B)
void main ( )
{ cSon t;
function1(t); }
// 4) der
C)
void main ( )
{ cFather * o;
cSon t;
o = &t;
o->print( ); }
// 1) cFather
D)
void main ( )
{ cFather o;
function2(o); }
// 2) cFather
【问题讨论】:
-
这不是“唯一的区别”;一个是 const,另一个不是。
-
您不了解具体的哪些行为?
-
你说得对,我修改了!!
-
我不明白为什么例如在案例A中,我们使用非虚拟方法,为什么不使用虚拟方法?
-
因为
o是非常量。
标签: c++ methods polymorphism virtual