C++类的对象指针的问题

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;还有什么意义呢?

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

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

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

cast),这种作法很危险。

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

 

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-07-16
a->b=c 在某些情况下是可以成立的,比如A是如下定义的
class A
{
public:
A* b;
};
这里的b是指A类中的成员变量,这个变量是一个A的指针。
这个和 你上面的 A* b = null 中的 b 不是一个意思。
a->b = c 这个多用于动态链表。
打字不易,如满意,望采纳。

C++类的对象指针的问题
下面C++重要性质中第1条说的是你这种情况。1、如果你以一个"基类之指针"指向一个"派生类之对象",那么经由该指针你只能调用该基类所定义的函数 2、如果你以一个“派生类之指针”指向一个“基类之对象”,你必须先做明显的转型操作(explicit cast),这种作法很危险。3、如果基类和派生类都定义了“相...

C++题目求助,多选题,关于对象指针?
选项A与B是正确的。根据题意,指针p是指向LEI类的指针,对p进行析取操作,即*p的数据类型则是LEI类,这样*p.x就可以合规地访问类成员x,包括对其赋值。另外,对指针p用箭头操作符访问数据结构内的成员,是C语言的传统用法,c++也继承了这一用法。

c\/c++中的指针的应用及注意问题
int *b,b表示的是指针变量(注意,是b表示指针变量而不是*b),*表示要说明的是指针变量。大家注意int *b[2]和int(*b)[2]是不同的,int *b表示一个指针数组,而int (*b)[2]表示含有两个元素的int指针,这里要注意运算优先级问题,有助于理解指针问题。在这里大概介绍基本概念就够了,...

C++编程中,编写某个类的时候,为什么在头文件中要建立某些类的指针,然后...
1.指针空间小。如果有其他 继承该类的类 不需要这些成员,造成空间浪费 2.指针灵活,指向的东西,想释放 就释放,想开辟就开辟。3.成员的开辟顺序 带有可掌握性。

C++类的对象和类的指针的区别,指针和引用的区别
C++ 对象是类的示例,当定义一个类的时候,系统是不为这个类分配空间的,只有当定义类的对象的时候才会分配空间,类的对象实际上就是类空间的引用。指针是用来存储变量的地址。

C++类指针在访问的时候何时用"->",何时候用"."
很高兴你能问这个问题,我想很多学程序设计不久的学生真不知道->的用法,我仔细说给你听吧:简单来说,“->”的前面一定是一个“指向结构体的指针”或“对象指针”,后面是结构或对象的一个"成员" 。如有:A->B,则可以肯定A是一个结构体指针或类的对象指针,而B是A中的一个成员。以你的便子...

c++用new 创建一类对象数组时,指针对象的表示是怎么表示的。为什么访问...
指针=数组名 (赋值) 那么 结论是 1. 数组名可以把首地址赋值给指针 但绝不等于指针(比如数组的个数信息等) 2.数组的工作方式是首地址+单个对象的sizeof(类或基本类型)。再给你而外启发 2维数组的第1维实际保存的是第2维数组的首地址,不想具体解释了 自己去看《C和指针》这本书 你...

C语言C++类的指针不太懂,有没有一些浅显易懂的例子来解释一下指针~!
我们可以通过这个指针引用my_int对象:比如 if (my_int == *point) cout << "equal" << flush; *point表示取point所指对象的值,这里即my_int的值0。如果你写if (my_int == point )编译器就会报错,因为my_int是一个整形变量,point是一个地址,两都无法比较。以上是指针的概念和基本用法,...

由c++类指针未初始化引发的“思考”
成员函数在静态编译的时候地址已经确定,调用的时候直接通过函数地址调用,this指针只是参数传入,p->get()也一样,只不过其内部调用了空的this指针来调用成员变量,所以出错。类在实例化对象后,对象占内存的大小,是取决于类里的 非静态数据成员 。类的 静态数据成员 , 非静态成员函数 , 静态...

c++多态,我释放指向子类的父类指针,子类的成员变量能被释放吗?_百度知 ...
在C++中,内存管理和引用计数是由编译器自动处理的。当一个对象被创建时,它的内存空间将会被自动分配。当这个对象没有任何指针指向它时,这块内存空间将会被回收,里面的值也会被清空。假设你有一个 `Worker` 类型的父类指针,它实际上指向一个子类对象,当你释放这个指针时,指向的这个子类对象也会...

相似回答
大家正在搜