封装、继承和多态 一时失言乱红尘 2021-10-01 04:20 334阅读 0赞 1、封装 定义:将某些东西包装隐藏,让外界无法直接访问,只能通过某些特定的方式访问。 目的:增强安全性,简化编程,使用者不用了解具体的实现细节,而只是通过外部接口以及特定的访问权限来使用类的成员。 2、继承 定义:新类从已有类那里得到已有的特性; 3、多态 定义:一个接口的多种实现; 动态多态:在程序运行时才能知道调用哪个函数,父类指针或者引用能够指向子类对象调用子类函数。 非多态: C++在编译的时候要确定每个对象调用的函数,当son的地址赋给father,C++编译器会进行类型转换,C++编译器会认为father保存的就是father的地址。 #include "pch.h" #include "string" #include <iostream> using namespace std; class Father { public: void face() { cout << "Father's face!" << endl; } void say() { cout << "Father say !" << endl; } }; class Son :public Father { void face() { cout << "Son's face!" << endl; } void say() { cout << "Son say!" << endl; } }; int main() { Son son; Father *father = &son; father->say(); } 输出结果: ![733387-20190116220514398-1649423293.png][] 多态:将父类say()函数声明为virtual; 编译器在编译时发现Father类有虚函数,此时编译器会为每个包含虚函数的类创建一个虚函数表(vtable),该表为一个一维数组用来存放虚函数的地址;同时编译器会为每个对象创建一个虚表指针(vptr),这个指针指向所属类的续表。 #include "pch.h" #include "string" #include <iostream> using namespace std; class Father { public: void face() { cout << "Father's face!" << endl; } virtual void say() { cout << "Father say !" << endl; } }; class Son :public Father { void face() { cout << "Son's face!" << endl; } void say() { cout << "Son say!" << endl; } }; int main() { Son son; Father *father = &son; father->say(); } ![733387-20190116221955191-663230335.png][] 转载于:https://www.cnblogs.com/dingou/p/10274816.html [733387-20190116220514398-1649423293.png]: /images/20210724/48b601f65b2f48388d214d9636a2790b.png [733387-20190116221955191-663230335.png]: /images/20210724/ec74217e3ca64a01b8a0ceefbf3e179a.png
还没有评论,来说两句吧...