指向基类对象的指针要访问派生类中的成员
声明为指向基类对象的指针,当其指向派生类对象时,只能利用它来直接访问派生类中从基类继承来的成员,不能直接访问公有派生类中特定的成员。 若想访问其公有派生类的成员,可以将基类指针显式类型转换为派生类指针来实现请问:如何将将基类指针显式类型转换为派生类指针?如下述程序:若要使指针ptr1指向派生类中的show函数,该如何转换?
#include<iostream.h>
#include<string.h>
class string
{char *name;
int length;
public:
string(char *str)
{length=strlen(str);
name=new char[length+1];
strcpy(name,str); }
void show(){cout<<name<<endl;}
};
class de_string:public string
{
int age;
public:
de_string(char *str,int age):string(str)
{de_string::age=age;}
void show()
{string::show();
cout<<“the age is:”<<age<<endl;} };
main()
{string s1("Smith"),*ptr1; //定义string类对象s1及指针ptr1
de_string s2(“Jean”,20),*ptr2;//定义de_string类对象s2及指针ptr2
ptr1=&s1; //将ptr1指向s1对象
ptr1->show(); //调用string类的成员函数
ptr1=&s2; //将ptr1指向string类的派生类de_string的对象s2
ptr1->show(); //调用s2对象所属的基类的成员函数show()
ptr2=&s2; //将ptr2指向de_string类对象s2
ptr2->show(); //调用de_string类的成员函数show()
return 1;}