就是想知道virtual的作用,还有隐藏,写的代码不堪入目,将就看吧,而且期待好的建议。。。求带飞

#include
using namespace std;
class Mammal
{ public:
Mammal(){cout<<"Mammal()"<<endl;
}

virtual void speak(){cout<<"I am not a dog";}
private:
};
class Dog :public Mammal
{
public:
Dog(){cout<<"Dog()"<<endl;}
void speak(){cout<<"I am a dog"<<endl;}
};
void main(){
Dog p1;
p1.speak();//无论加不加virtual,打印出来的都是 iam not a dog.那virtual有什么用啊,加不加都一样啊,而且p1.Mammal::speak();照样可以访问基类的speak.

system("pause");
}
基类如果和派生类的成员函数同名同参,那应该是被隐藏了,所以是访问不到的,但是基类实例化一个对象,仍然可以被打印出来,为什么呀?

通过Mammal访问speak,如果是virtual,访问的是派生类的,否则访问的是基类的。
特别地,因为C++支持多重继承,如果不使用virtual,那么在菱形继承的时候就不能通过编译,所谓菱形继承就是指a是基类,b c是a的派生类,现在再写一个类d,同时继承b c。