关于基类和派生类转换的问题!
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();}
#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;
}