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

virtual的使用中出现的有关问题

2012-10-19 
virtual的使用中出现的问题#include iostream#include stringusing namespace stdclass Button{publi

virtual的使用中出现的问题
#include <iostream>
#include <string>
using namespace std;
class Button
{
public :
Button(){cout<<"未命名的Button"<<endl;}
Button(string a){cout<<"新建一个Button:"<<a<<endl;}
virtual void display(){cout<<"基类Button"<<endl;}
~Button(){}
};
class Button1:public Button
{
private :
string member1;
string member2;

  public :
Button1::Button1( string a,string b,string c ):Button(a)

member1=b;
member2=c;
}

void display ()
{
cout<<"Button1的member2成员是:"<<member2<<endl;}
};
class Button2:public Button
{
private:
string number1;
string number2; 
  public:
Button2::Button2(string e,string f,string g):Button(e)
{ number1=f;
number2=g;}
void display()
{ cout<<"Button2的一个成员是:"<<number2<<endl;}

};


Button BY[2];
int main ()
{ string name;
string bn[2]={"Button1","Button2"};
Button1 Bn1(bn[0],"1","2");;
Button2 Bn2(bn[1],"3","4");;
  BY[0]=Bn1;
BY[1]=Bn2;
cout<<"列出所有Button:"<<endl;
for(int j=0;j<2;j++)
{
BY[j].Name(bn[j]);
}
cout<<"请输入一个你要列出所有功能的Button的名字:"<<endl;
cin>>name;
for(int i=0;i<2;i++)
{
if(bn[i]==name)
{
BY[i].display();//为什么这里输出的还是基类的play();请问怎样改才可以输出各自派生类中的play()
}
}
getchar();
return 0;
}

[解决办法]
C++中的多态性必须通过基类的指针或引用指向一个派生类来体现。你程序中是通过传值进行的,这会导致派生类被完全slice成基类对象。

Button *BY[2];
BY[0]=&Bn1;
BY[1]=&Bn2;

[解决办法]
因为你使用的是父类,你肯定调用的是父类的方法,你用多态的话,就会调用被重写了的子类方法

热点排行