C++虚函数访问权限的改变


如果在基类中虚函数的访问权限是一种情况,那么派生类在继承基类的时候,派生类可以重新定义基类虚函数的访问权限,经过实例验证是正确的。

从这里也说明了函数的覆盖或者说重定义跟前面的访问权限修饰没多大关系

//Base.h 

#pragma once
#include <iostream>
using namespace std;


class Base
{
public:
 Base(void){}
 ~Base(void){}
 virtual void fun(){cout<<"This is Base::fun"<<endl;}
 virtual void func()=0;
};

//Son.h

#pragma once
#include "base.h"
class Son :public Base
{
public:
 Son(void){}
 ~Son(void){}
 virtual void fun(){cout<<"This is a son function"<<endl;}
protected:
 virtual void func(){cout<<"what a fuck day it is"<<endl;}
};

//T.h

#pragma once
#include "son.h"
class T :
 public Son
{
public:
 T(void){}
 ~T(void){}
 void xy()
 {
  Base *b = new Son();
  b->func();
 }
};

//main.cpp

#include "testInline.h"
#include "Son.h"
#include "T.h"


void main()
{
 Base* pB;
 Son* pS = new Son();
 pB = pS;
 pB->fun();


 T tst;
 tst.xy();
}

结果:

This is a son function
what a fuck day it is

《C++ 设计新思维》 下载见

C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码

读C++ Primer 之构造函数陷阱

读C++ Primer 之智能指针

读C++ Primer 之句柄类

将C语言梳理一下,分布在以下10个章节中:

  1. Linux-C成长之路(一):Linux下C编程概要
  2. Linux-C成长之路(二):基本数据类型
  3. Linux-C成长之路(三):基本IO函数操作
  4. Linux-C成长之路(四):运算符
  5. Linux-C成长之路(五):控制流
  6. Linux-C成长之路(六):函数要义
  7. Linux-C成长之路(七):数组与指针
  8. Linux-C成长之路(八):存储类,动态内存
  9. Linux-C成长之路(九):复合数据类型
  10. Linux-C成长之路(十):其他高级议题

本文永久更新链接地址:

相关内容