点击打开原文链接
基类对象与派生类对象的使用关系
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<派生类*>(&基类对象);

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

基类对象与派生类对象的关系相关推荐

  1. C++的基类指针指向派生类对象,vector实现多态性

    添加问题: 练手创建一个表示各种不同包裹的继承层次. 在写代码时:要求vector来实现多态性 , 用基类指针变量指向子类对象. 前面的父类和子类定义: //创建一个表示各种不同包裹的继承层次 #in ...

  2. C++改变基类成员在派生类中的访问属性

    使用using声明可以改变基类成员在派生类中的访问属性.我们知道基类的公有成员经过公有继承,在派生类中其属性为public的,但是通过using 声明,我们可以将其改为private或protecte ...

  3. 基类数组存放派生类_永远不要将派生类数组赋值给基类类型指针

    C.152: Never assign a pointer to an array of derived class objects to a pointer to its base C.152:永远 ...

  4. C++基类指针指向派生类(指针)

    我们常用基类指针指向派生类对象来实现多态性. 私有继承不允许基类指针指向派生类 基类指针只能访问到基类中含有的公有成员. 当用基类指针指向派生类对象在动态分配堆上内存的时候,析构函数必须是虚函数! 成 ...

  5. C++中public/private/protected三种继承方式下基类成员对派生类的可见性探讨

     原文: http://blog.csdn.net/zgjxwl/article/details/4804233 1.public继承方式下 #include <iostream>   ...

  6. 不同派生方式下基类成员在派生类中的可访问范围属性

    不同派生方式下基类成员在派生类中的可访问范围属性 派生方式 派生方式 派生方式 基类成员 公有派生 私有派生 保护派生 私有成员 不可访问 不可访问 不可访问 保护成员 保护 私有 保护 公有成员 公 ...

  7. 虚函数之定义一个基类Shape,在此基础上派生出Rectangle和Circle再使用Rectangle类创建一个派生类Square。

    定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea( )函数计算对象的面积,再使用Rectangle类创建一个派生类Square.将getArea()改造 ...

  8. C++实例:基类BaseClass,派生类DerivedClass

    1.问题描述 定义一个基类BaseClass,从它派生出类DerivedClass,BaseClass有成员函数fn1().fn2(),DerivedClass也有成员函数fn1().fn2(),在主 ...

  9. C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? https://www.zhihu.com/question/30838092/answer/49623765

    https://www.zhihu.com/question/30838092/answer/49623765 C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? 代码如下 ...

最新文章

  1. Python之range和xrange的区别
  2. exchange离线整理数据库
  3. VC操作MySQL数据库
  4. MybatisPlus实现自动填充
  5. 矩池云上TensorBoard/TensorBoardX配置说明
  6. WebAssembly系列2-为什么我们需要WebAssembly—采访Brendan Eich
  7. USB接口定义详解(图)
  8. 共享文件问题 -- 无法访问 您可能没有权限使用网络资源
  9. Codeforces Round #496 (Div. 3) E2 - Median on Segments (General Case Edition)(思维+用bit 位求前缀合)
  10. 以“丰满”形容盛唐气象是误解
  11. Unity 托管内存(Managed Memory)
  12. k8s 部署pod到指定node
  13. 浅谈人行二代征信对接申请及接入验收流程
  14. 如何实现国外域名调转到国内已备案ip
  15. 心理学实验学习pygame编程-贪吃蛇(2)
  16. SwiftUI之深入解析如何使用组合矩形GeometryReader创建条形(柱状)图
  17. 如何用R做计量经济学
  18. python基础(六)------序列类型(下)
  19. !!! 格式塔原理及应用
  20. java之jsoup爬虫操作入门实战

热门文章

  1. 经验篇:朋友成功入职商汤自然语言处理算法工程师,整理了一份自然语言处理入门学习资料(NLP自然语言处理/学习路径)
  2. c语言比Java运算符不同,C语言运算符
  3. App Store 隐私政策
  4. CF1430C Numbers on Whiteboard
  5. 转载:算法工程师过去这一年:理想很丰满,现实很骨感
  6. 三种中心化Mean Centered
  7. PowerBi添加中国式报表列头。。。(持续更新)
  8. Certutil工具(Windows命令行下载常用)
  9. 程序员标配--使用hexo+github搭建个人博客
  10. ELGAmal加密与解密