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;还有什么意义呢?
展开
 我来答
易寻桃0k
推荐于2016-08-23 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:81
采纳率:100%
帮助的人:39.2万
展开全部

下面C++重要性质中第1条说的是你这种情况。

1、如果你以一个"基类之指针"指向一个"派生类之对象",那么经由该指针你只能调用该基类所定义的函数

2、如果你以一个“派生类之指针”指向一个“基类之对象”,你必须先做明显的转型操作(explicit 

cast),这种作法很危险。

3、如果基类和派生类都定义了“相同名称之函数”,那么通过对象指针调用成员函数时,到底调用了那个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定,这与第1点其实意义相通。

 

A*pa=&b;还有什么意义?这是基类指针指向派生类,当基类函数是虚函数,将调用派生类函数,(*pa).aa();将调用B::aa();调试如下图:

温柔互
2014-07-16 · 超过71用户采纳过TA的回答
知道答主
回答量:122
采纳率:0%
帮助的人:165万
展开全部
a->b=c 在某些情况下是可以成立的,比如A是如下定义的
class A
{
public:
A* b;
};
这里的b是指A类中的成员变量,这个变量是一个A的指针。
这个和 你上面的 A* b = null 中的 b 不是一个意思。
a->b = c 这个多用于动态链表。
打字不易,如满意,望采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式