C++公用继承的基本要点
来源:互联网 发布:攻沙翅膀进阶数据 编辑:程序博客网 时间:2024/05/21 08:04
1.一个子类类型的对象在任何时候都可以被视作它的基类类型的对象,前提是通过指针或引用访问该对象。
2.一个基类类型的指针或引用不能隐式转换为其子类类型,通过强制类型转换固然可以避免编译问题,但存在运行时风险。
3.基类中的私有成员在子类中存在但不可见,故无法直接访问。可以通过调用基类中的公有成员函数访问。
4.基类中的保护成员可以被子类访问。
5.在子类中可以定义和基类中同名的标识符,并对后者构成隐藏。
示例代码:
#include<iostream>using namespace std;class People{public:People(const string& name="没名",int age=80):m_name(name),m_age(age){}void who(void)const{ cout<<m_name<<","<<m_age<<endl;}private:string m_name;int m_age; };class Student:public People{public:Student(const string& name,int age,int num):People(name,age),m_num(num){}void learn(const string& lesson){cout<<"我在学"<<lesson<<','<<"我的学号"<<m_num<<endl;}private:int m_num;};int main(void){Student s1("小新",10,101);s1.learn("C++");//....s1.who(); //小新,10People* p1=&s1;//子类对象可以直接转换为基类对象p1->who(); //小新,10People p2("小亮",11);Student *st =static_cast<Student*> (&p2);//只能显示转换不能隐式转换//Student *st =(Student*)&p2;st->learn("C");//我在学C,我的学号987987;//强转导致内存泄露,学号丢失。return 0;}
隐藏示例代码:
#include <iostream>using namespace std;class A{public: A(int n =0):m_n(n){} void print(void){ cout<<m_n<<endl; } int m_n;};class B: public A{public: B(int n):m_n(n){} int m_n;};int main(void){ B b(100); b.print();// 0 基类中的m_n被B类中的m_n隐藏了,最终看到的是A类的 return 0;}
- C++公用继承的基本要点
- 类的公用继承
- C#--继承的基本使用
- 公用继承
- c++:继承相关的要点热点,以及菱形继承的底层实现
- 复习一:C的OOP-基本继承
- 路由器的基本配置及公用命令
- LCD12864的基本要点
- C#窗体继承的要点
- 初学c/c++——零碎的基本要点(含printf的基本输出格式)
- 【C++】归纳要点,轻松学会继承
- public 公用继承
- 输入输出--公用继承
- ACM--输入输出,公用继承
- 7.25公用继承
- C++ 公用继承
- 公用程序集开发要点
- asp.net2005(c#) Treeview的公用方法
- Linux内核高端内存
- OpenMP学习:数据的共享与私有(一)
- 【算法】从1到n的正数中0的出现次数
- 更底层定制org.nutz.dao.impl.NutDao
- 近期面试感受
- C++公用继承的基本要点
- Linux的mount命令详解
- onsubmint事件
- 关于java的文件操作
- Xcode 快捷键
- sqlserver2008对XML的操作
- perl调试,直接用perl自带的debugger
- 2011-01-04 14:16 Android电源管理系统调研报告
- HOJ 1019 Grandpa's Other Estate