//Derived.h
#pragma once
#include "base.h"
class Derived :
private Base
{
public:
Derived(void){};
~Derived(void){};
using Base::size;
using Base::fn;
};
//main.cpp
#include "Base.h"
#include "Derived.h"
#include
using namespace std;
void main()
{
Derived XX;
Base YY;
cout<
在这里我们也可以看到如果基类的函数有重载的话,针对同一个using Base::XXX,可以使所用的名字为XXX的基类函数在派生类中得到声明。真可可谓一次声明,多个使用。
12 friend 跟继承的关系
友元跟继承没有关系。基类的派生类不能被基类的派生类访问。友元类的派生类对基类没有访问权限。
13 引用转换,转换对象
引用转换:派生类对象转换为基类类型的引用
转换对象:用派生类对象转换为基类的对象,这个时候形参是固定的,编译和运行时候的对象都是基类类型对象。派生类的基类部分被复制到形参中。
引用转换:派生类对象转换为基类的引用。但是如果赋值的话也是把派生类的基类部分赋值给基类对象,这和指针的切片效应一个道理。
14 基类和派生类的转换
派生类转对象赋给基类也是有条件才能行的,这个条件就是派生类是通过public来继承的,这样的话不论是在成员代码还是在用户代码中,都能实现
Derived d;
Base b = d;
如果是通过protected继承的,那么只能在成员定义中使用这样的代码。
15 默认的继承准则
类和结构体在默认的继承准则方面刚好相反。
<1>类继承的时候,如果不加限定符,那么默认是private继承,结构体不加限定符的时候,则是默认的public继承。
<2>此外strut中从定义开始到内部的第一个限定符之间默认的是public修饰,但是class默认的是private修饰。