class Base {public:virtual ~Base() = default; // 虚析构函数virtual void foo() = 0; // 纯虚函数};class Derived : public Base {public:void foo() override {// 实现函数}};std::unique_ptr<Base> ptr = std::make_unique<Derived>();ptr->foo(); // 通过基类指针调用派生类的虚函数 在...
// 抽象策略类class Strategy {public:virtual void AlgorithmInterface() = 0; // 纯虚函数};// 具体策略类Aclass ConcreteStrategyA : public Strategy {public:void AlgorithmInterface() override {// 实现算法A}};// 具体策略类Bclass ConcreteStrategyB : public Strategy {public:void AlgorithmInterface()...
通过使用虚函数,可以在派生类中覆盖基类中的同名函数,实现多态性的特性。 需要虚函数的原因是,当一个基类指针指向派生类对象时,如果没有使用虚函数,在调用成员函数时只会调用基类中的函数,而不会调用派生类中的同名函数。使用虚函数可以让程序在运行时确定要调用的函数,实现多态性。 4. 什么是内存泄漏?如何避免...
函数指针可以实现回调函数的功能,在C语言中常见的使用场景就是回调函数。在应用开闭原则时,我们可以将需要变化的部分封装为函数指针参数,通过传入不同实现的函数指针来实现代码的扩展。这样,即使需要修改代码,也只需要修改函数指针指向的实现,而不用修改主逻辑代码。 举例来说,我们可以定义一个处理消息的函数,并将其实...
在C++中,多态通常都是使用虚函数来实现的,但是C语言中并没有虚函数,如何实现重载呢? 答案也显而易见,也是函数指针的扩展,以下面例子为例: 1 #include 2 #include 3 4 //虚函数表结构 5 struct base_vtbl 6 { 7 void(*dance)(void *); 8 void(*jump)(void *); ...
2.面向对象编程(OOP):C语言本身不支持面向对象编程。虽然可以通过结构体和函数指针模拟类的概念,但这...
虚机制:虚函数、虚函数表、纯虚函数 C和 C++ 的一些区别,比如 new、delete 和 malloc、free 的区别 一些关键字的作用:static、const、volatile、extern 四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast STL部分容器的实现原理,如 vector、deque、map、hashmap 类的封装,构造和析构、静态成...
虚函数内联使用 代码语言:javascript 复制 #include<iostream>using namespace std;classBase{public:inline virtualvoidwho(){cout<<"I am Base\n";}virtual~Base(){}};classDerived:publicBase{public:inlinevoidwho()// 不写inline时隐式内联{cout<<"I am Derived\n";}};intmain(){// 此处的虚函数 wh...
栈在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。 当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就...