C++类的对象指针的问题
classA{public:virtualvoidaa(){cout<<"aa"<<endl;}voidpp(){cout<<"app"<<endl;}};classB:...
class A
{
public:
virtual void aa(){cout<<"aa"<<endl;}
void pp(){cout<<"app"<<endl;}
};
class B: public A
{
public:
void aa(){cout<<"bb"<<endl;}
void pp(){cout<<"bpp"<<endl;}
};
int main(int argc,char *argv[])
{
B b;
A a;
A*pa=&b;//这话是什么意思,A的对象指针怎么指向B的对象?
pa->aa();
pa->pp();
(dynamic_cast<B*>(pa))->pp();
pa->pp();
(*pa).pp();
cout<<endl;
cout<<"&b="<<&b<<endl;
cout<<"*pa="<<pa<<endl;
return 0;
}
一般都是A*pa=&a;指向自己类的对象,可这道指向B类的对象了,我原来的理解是(*pa).pp();将调用B::pp(); 可是结果却显示(*pa).pp();还是调用的A::pp(); 那么A*pa=&b;还有什么意义呢? 展开
{
public:
virtual void aa(){cout<<"aa"<<endl;}
void pp(){cout<<"app"<<endl;}
};
class B: public A
{
public:
void aa(){cout<<"bb"<<endl;}
void pp(){cout<<"bpp"<<endl;}
};
int main(int argc,char *argv[])
{
B b;
A a;
A*pa=&b;//这话是什么意思,A的对象指针怎么指向B的对象?
pa->aa();
pa->pp();
(dynamic_cast<B*>(pa))->pp();
pa->pp();
(*pa).pp();
cout<<endl;
cout<<"&b="<<&b<<endl;
cout<<"*pa="<<pa<<endl;
return 0;
}
一般都是A*pa=&a;指向自己类的对象,可这道指向B类的对象了,我原来的理解是(*pa).pp();将调用B::pp(); 可是结果却显示(*pa).pp();还是调用的A::pp(); 那么A*pa=&b;还有什么意义呢? 展开
2个回答
展开全部
下面C++重要性质中第1条说的是你这种情况。
1、如果你以一个"基类之指针"指向一个"派生类之对象",那么经由该指针你只能调用该基类所定义的函数
2、如果你以一个“派生类之指针”指向一个“基类之对象”,你必须先做明显的转型操作(explicit
cast),这种作法很危险。
3、如果基类和派生类都定义了“相同名称之函数”,那么通过对象指针调用成员函数时,到底调用了那个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定,这与第1点其实意义相通。
A*pa=&b;还有什么意义?这是基类指针指向派生类,当基类函数是虚函数,将调用派生类函数,(*pa).aa();将调用B::aa();调试如下图:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询