滴水3.权限控制+虚函数表---虚表函数
1.头文件的引入使得结构简洁
2.私有与公共
1、对外提供的函数或者变量,发布成public的 但不能随意改动.
2、可能会变动的函数或者变量,定义成private的 这样编译器会在使用的时候做检测.
3、只有结构体内部的函数才可以访问private的成员.
4、public/private可以修饰函数也可以修饰变量.
3.私有的如何访问
private修饰的成员与普通的成员没有区别 只是编译器会检测.
private修饰的成员只要自己的其他成员才能访问
4.私有的优势
由上图代码,我们需要在内部给变量赋值,这样我们就可以对这个变量的赋值进行各种操作
5.类与结构区别
成员权限区别
编译器默认class中的成员为private 而struct中的成员为public
父类中的程序继承后变成private属性 如果不希望改变成员的属性: class Sub:public Base
6.私有是否可以被继承
1、父类中的私有成员是会被继承的
2、只是编译器不允许直接进行访问
7.继承的构造函数的先后顺序
先执行父类的构造函数 再执行子类的构造函数
--------------------------------------------------------------------------------------------------------------------
下午虚函数表
虚函数
直接 --间接 调用
virtual 虚表函数
汇编查看
通过对象调用是直接调用
用地址进行调用
进行间接调用
虚函数对结构体大小
我们创建多个虚函数 但是在打印大小的时候发现大小只有4,这是为什么呢
这是因为在这个结构体中存取了虚表函数的一个索引清单

遍历所以虚表函数
#include<stdio.h> class mu { public: void f1() { printf("1"); } virtual void fu2() { printf("我a"); } virtual void fu3() { printf("我b"); } private: }; int main() { mu mu1; mu* q = &mu1; printf("%x\n",*(int*)&mu1); typedef void(*as)(void); as as1; for (int i = 0; i < 2; i++) { int temp = *((int*) (*(int*)&mu1) + i); as1 = (as)temp; as1(); } return 0; }
重写与重载区别
由于VS2019是直接调用 但是虚函数表还是有滴,故此不进行分析
本文来自博客园,作者:逆向狗,转载请注明原文链接:https://www.cnblogs.com/Agtw/p/16977955.html