关于函数参数

来源:百度知道 编辑:UC知道 时间:2024/09/21 22:08:00
void testPolymorphism(A a)
{
a.virt();
}

//出错
void testPolymorphism(const A a)
{
a.virt();
}

我定义的A中含有虚函数会报错,而我把虚函数去掉就通过,为什么?
class A
{
public:
A()
{
cout<<"A()"<<endl;
}

virtual void virt()
{
cout<<"A::虚函数!"<<endl;
}
} ;

class B
{
public:
B()
{
cout<<"B()"<<endl;
}
virtual void virt()
{
cout<<"B::虚函数!"<<endl;
}
A a;
};
void testPolymorphism(A a)
{
a.virt();
}

//出错
/*void testPolymorphism(const A a)
{
a.virt();
} */
这样清楚多了,在线等

建议 贴 全点代码。。

有虚函数的类,是可以定义对象的。 有纯虚函数的类不能, 是不是定义成纯虚函数了??? 或者将虚函数定义成私有类型了? 这个很多可能 把代码贴出来看看

这样就对了 :)

问题出在 const A a 这里,

在类A前面 加const 意思就是, 这个类定义的对象是常量,也就是说a是常量, 而常量对象 只能调用常量成员函数

什么是常量成员函数呢? 就是在函数名之后加const 其意为:这个成员函数不能修改类的值。

而virt() 不是常量成员函数 所以出现错误

解决方法:
virtual void virt() const
{
cout<<"A::虚函数!"<<endl;
}

这样就可以了

不过 const A a;这种定义很少见 我之前也没有碰到过呢

有虚函数的类,不能定义对象。