基类对象与派生类对象的关系


基类对象与派生类对象的使用关系



1. 派生类对象作为基类对象处理
由于派生类具有所有基类的成员,所以把派生类的对象赋给基类对象是合理的,不过要求这种继承方式必须是public方式。但是,反过来赋值会使基类中一具有派生类的成员(因为派生类的成员通常是比基类的成员多),所以这是不允许的。
2. 基类指针指向派生类对象
因为派生类对象也是基类对象,所以指向派生类对象的指针可以转换为指向基类对象的指针,这种引用方式是安全的,但是用这种方式只能引用基类成员。如果试图通过基类指针引用那些只有在派生类中才有的成员,编译系统会报告错误。
#include<iostream.h>
#include<string.h>
class Stud
{
char name[10];
int score;
public:
Stud(char na[],int s)
{
strcpy(name,na);
score=s;
}
void disp()
{
cout<<name<<" "<<score<<" ";
if(score>=90)
cout<<"优"<<endl;
else if(score>=80)
cout<<"良"<<endl;
else if(score>=70)
cout<<"中"<<endl;
else if(score>=60)
cout<<"及格"<<endl;
else
cout<<"不及格"<<endl;
}
};


class Unstud:public Stud
{
char cname[10];
public:
Unstud(char na[],char cn[],int s):Stud(na,s)
{
strcpy(cname,cn);
}
};


class Grstud:public Stud
{
char research[10];
public:
Grstud(char na[],char rs[],int s):Stud(na,s)
{
strcpy(research,rs);
}
};


int main()
{
Stud *p;
Unstud st1("李明","计科02",85);
Grstud st2("王华","数据挖掘",92);
p=dynamic_cast<Stud *>(&st1);
p->disp();
p=dynamic_cast<Stud *>(&st2);
p->disp();
}


3. 派生类指针强制指向基类对象
直接用派生类指针指向基类的对象,这种方式会导致语法错误。但可以将派生类强制转换为基类指针,然后就可以调用基类的成员了。这种强制转换使用的静态转型运算符,其使用格式如下:
派生类对象指针=static_cast<派生类*>(&基类对象);





看了这个  还是有点不太明白为什么派生类对象可以访问基类成员这句话是错的

猜你喜欢

转载自blog.csdn.net/KLFTESPACE/article/details/80894384