这段c++代码哪错了啊?

来源:百度知道 编辑:UC知道 时间:2024/05/30 09:56:40
#include<iostream.h>
class A
{
public:
A(int i){x=i;}
void dispa(){cout<<"x="<<x<<endl;}
private:
int x;
};
class B:public A
{
public:
B(int i,int j):A(i){y=j;}
void dispb(){cout<<"y="<<y<<endl;}
private:
int y;
};
void main()
{
A *p,a(1);
B b(2,3);
p=&a;
p->dispa();
p=&b;
p->dispb();
}
编译后提示:error C2039: 'dispb' : is not a member of 'A'
see declaration of 'A'
应该怎么改正确?

A的指针p不能直接调用B的函数,所以你可以将diap()设为虚函数,之后一切OK!我调试了!
#include<iostream.h>
class A
{
public:
A(int i){x=i;}
virtual void disp(){cout<<"x="<<x<<endl;}
private:
int x;
};
class B:public A
{
public:
B(int i,int j):A(i){y=j;}
void disp(){
A::disp();
cout<<"y="<<y<<endl;}
private:
int y;
};
void main()
{
A *p,a(1);
B b(2,3);
p=&a;
p->disp();
p=&b;
p->disp();
}

B 继承自A A 能使用dispb() 但B的对象不能使用dispa()