读书人

关于基类和派生类转换的有关问题

发布时间: 2012-03-06 20:47:55 作者: rapoo

关于基类和派生类转换的问题!

C/C++ code
class a{  public:  a();  a(char *s)  {strcpy(name,s);}  void getname()  {cout<<name<<endl;}  private:  char name[10];}class b:public a{public:  b(char *s)  {strcpy(name,s);} void getname() {cout<<"b:"<<name<<endl;}  private:  char name[10];}void main(){  a aa("namea");  a* pa;  b bb("nameb");  pa=&bb;  (a)bb.getname();  pa->getname();  (b*pa)->getname();}
请问
1:输出的结果是?
2:(a)bb.getname();这样的意思是要输出在派生类b中继承a的getname吧? 那么bb的地址是不是还是指向b的?
3:pa=&bb;pa的地址已经指向bb了 为什么在调用bb函数的时候还要转换一下呢?
4:(b)aa.getname();这句话是不是是错的?

谢谢!!!


[解决办法]
bb的基类部分没初始化
[解决办法]
C/C++ code
 
#include <iostream>
#include <vector>

using namespace std;

class a
{
public:
a();
a(char *s)
{
strcpy(name,s);
}
void getname()
{
cout < <name < <endl;
}
private:
char name[10];
};
class b :public a
{
public:
b(char *s) : a(s)//此处用a(s) 而并不是a(*s) , 并且这样是拷贝基类部分的name
{
strcpy(name, s);//此处是赋值派生类的name 这样做的话基类和派生类的name内容一样
}
void getname()
{
cout < <"b:" < <name < <endl;
}
private:
char name[10];
};
int main()
{
a aa("namea");
a* pa;
b bb("nameb");
pa = &bb;
((a)bb).getname();//bb被强制转为a类型的对象 注意符号优先级
pa->getname();//因为getname不是虚函数 所以是静态调用a::getname;
((b*) pa)->getname();//此处不安全 并注意符号优先级
system("pause");
return 0;
}


[解决办法]
探讨
system("pause");

[解决办法]
首先,LZ的代码有一点错误!
虽然pa=&bb;,但是它还是会调用a的函数,所以要转换一下。。

读书人网 >C++

热点推荐