当前位置: 首页 > news >正文

平潭综合实验区建设局网站软件开发前景分析

平潭综合实验区建设局网站,软件开发前景分析,龙岩网上房地产,怎么制作公众号的链接本文部分代码通过DeepSeek生成 创建一个基类和一个子类。 基类 Animal 包含一个虚函数 makeSound()&#xff0c;子类 Dog 继承自 Animal 并重写了 makeSound() 函数。 #include <iostream> #include <string>// 基类 Animal class Animal { public:// 构造函数An…

本文部分代码通过DeepSeek生成


创建一个基类和一个子类。

基类 Animal 包含一个虚函数 makeSound(),子类 Dog 继承自 Animal 并重写了 makeSound() 函数。

#include <iostream>
#include <string>// 基类 Animal
class Animal {
public:// 构造函数Animal(const std::string& name) : name(name) {}// 虚函数,子类可以重写virtual void makeSound() const {std::cout << name << " makes a sound." << std::endl;}// 虚析构函数,确保正确释放资源virtual ~Animal() {}protected:std::string name;
};// 子类 Dog,继承自 Animal
class Dog : public Animal {
public:// 构造函数Dog(const std::string& name) : Animal(name) {}// 重写基类的虚函数void makeSound() const override {std::cout << name << " says: Woof! Woof!" << std::endl;}
};int main() {// 创建基类对象Animal* myAnimal = new Animal("Generic Animal");myAnimal->makeSound();  // 输出: Generic Animal makes a sound.delete myAnimal;// 创建子类对象Animal* myDog = new Dog("Buddy");myDog->makeSound();  // 输出: Buddy says: Woof! Woof!delete myDog;return 0;
}

代码说明:

  1. 基类 Animal:

    • 包含一个成员变量 name,用于存储动物的名字。

    • 包含一个虚函数 makeSound(),子类可以重写这个函数。

    • 包含一个虚析构函数,确保在删除派生类对象时正确调用析构函数

  2. 子类 Dog:

    • 继承自 Animal,并重写了 makeSound() 函数,使其输出狗的声音。

    • 使用 override 关键字明确表示重写基类的虚函数

  3. main 函数:

    • 创建了一个 Animal 对象和一个 Dog 对象,并调用它们的 makeSound() 函数。

    • 使用 delete 释放动态分配的内存

 


在 C++ 中,虚析构函数的作用是确保在通过基类指针删除派生类对象时,能够正确调用派生类的析构函数。如果没有虚析构函数,可能会导致派生类的析构函数不被调用,从而引发资源泄漏或其他未定义行为

为什么需要虚析构函数?

当使用基类指针指向派生类对象时,如果基类的析构函数不是虚函数,那么当删除该指针时,只会调用基类的析构函数,而不会调用派生类的析构函数。这会导致派生类中分配的资源(如动态内存、文件句柄等)无法正确释放。

示例代码

以下是一个示例,展示了虚析构函数的作用:

#include <iostream>// 基类
class Base {
public:Base() {std::cout << "Base constructor called." << std::endl;}// 虚析构函数virtual ~Base() {std::cout << "Base destructor called." << std::endl;}
};// 派生类
class Derived : public Base {
public:Derived() {std::cout << "Derived constructor called." << std::endl;}~Derived() {std::cout << "Derived destructor called." << std::endl;}
};int main() {// 使用基类指针指向派生类对象Base* ptr = new Derived();// 删除指针delete ptr; // 正确调用派生类和基类的析构函数return 0;
}

输出结果

Base constructor called.
Derived constructor called.
Derived destructor called.
Base destructor called.

关键点

  1. 虚析构函数的作用

    • 当 delete 一个基类指针时,如果基类的析构函数是虚函数,程序会先调用派生类的析构函数,再调用基类的析构函数

    • 如果基类的析构函数不是虚函数,则只会调用基类的析构函数,而不会调用派生类的析构函数

  2. 没有虚析构函数的情况
    如果去掉 Base 类析构函数的 virtual 关键字,输出将变为:

Base constructor called.
Derived constructor called.
Base destructor called.

可以看到,Derived 类的析构函数没有被调用,这可能导致资源泄漏。


  1. 何时使用虚析构函数

    • 如果一个类可能被继承,并且可能通过基类指针删除派生类对象,那么这个类的析构函数应该是虚函数

    • 如果类不会被继承,或者不会通过基类指针删除派生类对象,则不需要虚析构函数

总结

虚析构函数是 C++ 中多态性的重要组成部分,确保在删除派生类对象时能够正确调用派生类和基类的析构函数。在设计基类时,如果存在继承的可能性,务必为基类声明虚析构函数


 

http://www.dtcms.com/a/492644.html

相关文章:

  • 企业网站建设需要费用公司做网站怎么样
  • SAP MM物料主数据变更接口分享
  • 美术培训学校网站模板万州房产网站建设
  • 安徽公共资源交易中心招标网谷歌搜索广告优化
  • 北京网站建设技术部html编辑器在哪里设置
  • 昆明做个人网站做logo好的网站
  • k8s 持久化存储方案-PVC
  • 【雅思播客024】Investing in Emerging Markets
  • 江阴建设局网站招考查派网站建设
  • 国内做网站建设知名的公司海口网站制作网站
  • 导购网站如何做国外推广怎么做
  • 四川做网站优化价格国内做网站的大公司有哪些
  • Day22 回溯算法_part01
  • MySQL 数据库优化设计:优化原理和数据库表设计技巧
  • 技术观察:RPA到智能体转型的三大技术陷阱与路径选择
  • 2023网站推广入口中国室内设计师资格证
  • 有没有专业做艺术品的网站潍坊潍微贷是哪家网站建设的
  • 网站关键词多少个最好潜江资讯网二手车
  • 信号数据(eeg,ecg,心率等)- 深度学习
  • 社团网站建设小公司做网站还是微博
  • 第8章 基于表格型方法的规划和学习(1) 模型、规划与学习和Dyna-Q
  • 做网站的前景如何营销策略国内外文献综述
  • 购物型网站怎么建立wordpress证优客
  • 冷门行业做网站的优势o2o网站建设多少钱
  • 网站后台的建设建设网站是做什么
  • [嵌入式系统-124]:GPU软件运行平台的三个支柱:OpenGL、OpenCL 、CUDA
  • 网站信息抽查评估杭州专业seo服务公司
  • 网站备案号查询网址免费空间申请哪个好
  • 洛阳网站建设睿翼网络入驻洛阳做钓鱼网站
  • 株洲网站建设平台免费网站空间 国外