C++ 继承(一、语法以及三种继承方式的要点)
来源:互联网 发布:斩妖伏魔录3java破解版 编辑:程序博客网 时间:2024/06/03 21:03
一、语法
class 子类名: 继承方式1 基类名1,继承方式2 基类名2,...{
//子类定义;
};
二、继承的基本要点:
1> 一个子类对象在任何时候都可以作为一个基类类型的对象,而不必使用显式类型转换,前提是两者(子类及其基类)都是通过指针或引用操作;
2>在子类中可以直接使用基类的所有公有和保护成员,就像它们是在子类中声明的那样,但是基类的私有成员在子类中虽然存在但不可见(即不可访问它);
3>尽管基类的公有和保护成员在子类中直接可见,但是也可以在子类中重新定义这些名字--名字隐藏.如果一定要绕过名字隐藏访问基类中的这些名字,
可以通过作用域分解操作符"::"完成;
实例:
#include <iostream>using namespace std;class Person{public: Person(string strName,int age):m_strName(strName),m_nAge(age){} private: string m_strName; int m_nAge;};class Student:public Person{public: Student(string strName,int age,int nNum):Person(strName,age),m_nNum(nNum){}private: int m_nNum;};int main(void){ return 0;}
解析1:一个子类对象在任何时候都可以作为一个基类类型的对象,而不必使用显式类型转换,前提是两者(子类及其基类)都是通过指针或引用操作
Student*pStu = new Student("test01",10,01); Person*pPer = pStu;
// 反过来就出现错 必须使用显示类型转换 Person*pPer = new Person("test01",10); // Student*pStu = pPer; Student*pStu = static_cast<Student*>(pPer); // 转换成功 但是存在风险
Person*pPer = new Student("test01",10,01); Student*pStu = static_cast<Student*>(pPer); // pStu 是安全的,因为它实际指向就是子类对象
解析2:继承方式
对于公有继承方式
(1) 基类成员对其对象的可见性:
公有成员可见,其他不可见。这里保护成员同于私有成员。
(2) 基类成员对派生类的可见性:
公有成员和保护成员可见,而私有成员不可见。这里保护成员同于公有成员。
(3) 基类成员对派生类对象的可见性:
公有成员可见,其他成员不可见。
所以,在公有继承时,派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访问基类中的公有成员和保护成员。这里,一定要区分清楚派生类的对象和派生类中的成员函数对基类的访问是不同的。
对于私有继承方式
(1) 基类成员对其对象的可见性:
公有成员可见,其他成员不可见。
(2) 基类成员对派生类的可见性:
公有成员和保护成员是可见的,而私有成员是不可见的。
(3) 基类成员对派生类对象的可见性:
所有成员都是不可见的。
所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。
对于保护继承方式
这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言,对基类成员有不同的可见性。
上述所说的可见性也就是可访问性。
关于可访问性还有另的一种说法。这种规则中,称派生类的对象对基类访问为水平访问,称派生类的派生类对基类的访问为垂直访问。
总结:(区分类中、类外部使用的区别)
类成员的访问控制
访问限定符 访控属性 基类 子类 外部 友元
public 公有 OK OK OK OK
protected 保护 OK OK NO OK
private 私有 OK NO NO OK
解析3:
class A{void foo(int n){...}};class B:public A{void foo(double f){...}void bar(void){foo(3.14); //调用B::foo()A::foo(10); //调用A::foo()}};
B b;b.foo(); //调用B::foo();b.A::foo(); //调用A::foo();
三、子类的构造函数和析构函数
四、子类的拷贝构造函数和拷贝赋值函数
五、子类的操作符重载
六、多重继承
- C++ 继承(一、语法以及三种继承方式的要点)
- C++(继承语法&&继承方式)
- C++——三种继承方式
- c++:继承相关的要点热点,以及菱形继承的底层实现
- 三种继承方式
- 三种继承方式
- 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。
- 共有继承 私有继承 保护继承 派生类的三种继承方式小结
- 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。
- C++的继承(三种继承方式)
- C++的三种继承方式
- hibernate 实现继承的三种方式
- c++的三种继承方式
- Hibernate继承映射的三种方式
- 派生类的三种继承方式
- c++的三种继承方式
- c++的三种继承方式
- C++继承的三种方式
- 如何完整的修改一个数据库的名称
- "由于应用程序配置不正确"的解决办法
- Spring 3.x jar 包详解 与 依赖关系
- 大话Cassandra数据模型
- 海参的营养价值
- C++ 继承(一、语法以及三种继承方式的要点)
- POJ2159 Ancient Cipher
- 席慕容的经典语录
- ASP.NET页面跳转相关知识
- .net播放器
- Oracle 数据库忘记系统管理员密码解决方法
- 企业ERP系统开发总结及建议
- Solaris 10 u10 安装 oracle 10g2 链接时出现错误的解决方法
- linux简介