1.如题。如果是基本类型的指针指向另外一个类型的对象,编译器会报错。那么题目这个情况,会被编译器的类型安全检查出来而编译出错么?
经过实测,不会报错。C++允许这样的情况存在。
2.那么就会问一个问题,这个指针调用的数据成员或者成员函数是谁的呢?
经过测试,是基类的。
3.那么就会继续问一个问题,能用这个指针调用派生类的东西吗?
经过测试,可以。但是需要用强制类型转换,将这个指针转换成派生类的指针。
ps.当一个基类指针用new指向一个派生类时,基类和派生类都会初始化一个对象,各自维护。调用哪一个取决于指针是何种类型。
最后是测试程序,大家随意感受一下~
View Code
1 #include <iostream>
2 using namespace std;
3
4 class A
5 {
6 public:
7 A(int aa=88)
8 :a(aa)
9 {
10
11 }
12 void f()
13 {
14 cout<<"A"<<endl;
15 }
16
17 int a;
18 };
19 class B : public A
20 {
21 public:
22 B(int ba= 77, int bb=66)
23 :a(ba),b(bb)
24 {
25
26 }
27 void f()
28 {
29 cout<<"B"<<endl;
30 }
31
32 int a;
33 int b;
34 };
35
36
37 void main()
38 {
39 A* p=new B;
40 p->f();
41 (*p).f();
42 static_cast<B*>(p)->f();
43 cout<<p->a<<endl
44 <<static_cast<B*>(p)->a<<endl
45 <<static_cast<B*>(p)->b<<endl;
46 delete p;
47 }
输出是
原文链接: https://www.cnblogs.com/henrycodefarmer/archive/2013/04/12/3015862.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/84287
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!