C++例子

#include<iostream>
using namespace std;

//抽象类
//抽象cpu类
class CPU
{
public:
   virtual void calcuate()=0;
};
//抽象显卡类
class VideoCard
{
public:
   virtual void display()=0;
};
//抽象内存条类
class Memory
{
public:
  virtual void storage()=0;

};

//电脑类
class Computer
{
public:
  //构造函数
  Computer(CPU *cpu, VideoCard *vc, Memory *mem)
  {
   m_cpu = cpu;
   m_vc = vc;
   m_mem = mem;
  }
  //什么行为,提供变量工作的函数
  void work()
  {
    m_cpu->calcuate();
    m_vc->display();
    m_mem->storage();
  }
  ~Computer()
{
  if(m_cpu!=NULL)
  {
    delete m_cpu;
    m_cpu =NULL;
  }
if(m_vc!=NULL)
  {
    delete m_vc;
    m_vc =NULL;
  }
if(m_mem!=NULL)
  {
    delete m_mem;
    m_mem =NULL;
  }

}

private:
// 这个类先写private
   CPU *m_cpu;     //定义一个CPU的指针
   VideoCard *m_vc;
   Memory *m_mem;


};

//具体厂商
//intel厂商
class IntelCPU : public CPU
{
public:
   virtual void calcuate()
   {
    cout<<"Intel的CPU开始计算了!"<<endl;
   }

};

class IntelVideoCard: public VideoCard
{
public:
   virtual void display()
   {
    cout<<"Intel的显卡开始计算了!"<<endl;
   }
};

class IntelMemory: public Memory
{
public:
   virtual void storage()
   {
    cout<<"Intel的存储开始计算了!"<<endl;
   }
};

// lenovo
class LenovoCPU : public CPU
{
public:
   virtual void calcuate()
   {
    cout<<"Intel的CPU开始计算了!"<<endl;
   }

};

class LenovoVideoCard: public VideoCard
{
public:
   virtual void display()
   {
    cout<<"Intel的显卡开始计算了!"<<endl;
   }
};

class LenovoMemory: public Memory
{
public:
   virtual void storage()
   {
    cout<<"Intel的存储开始计算了!"<<endl;
   }
};


void test01()
{
    //第一台电脑零件
    //new返回的是同类型的指针
    //int *p= new int  或int[10]
    CPU *IntelCpu = new IntelCPU;
    VideoCard * IntelCard = new IntelVideoCard;
    Memory *IntelMem = new IntelMemory;
//创建第一台电脑
    Computer * computer1= new Computer(IntelCpu,IntelCard,IntelMem);
    computer1->work();
    delete computer1;
    //method1  继续释放new的
    // 放在析构中
    // delete IntelCPU;
    // delete IntelCard;
    // delete IntelMem;
//创建第二台
    cout<<"创建第二胎"<<endl;
    CPU *LenovoCpu = new LenovoCPU;
    VideoCard * LenovoCard = new LenovoVideoCard;
    Memory *LenovoMem = new LenovoMemory;
    //或者直接new
    // Computer *computer2 = new Computer( new LenovoCPU,new LenovoVideoCard,new LenovoMemory);
    Computer * computer2 = new Computer(LenovoCpu,LenovoCard,LenovoMem);
    computer2->work();
    delete computer2;

}
int main()
{
  test01();
//   system("pause");
  return 0;
}

在这里插入图片描述
在这里插入图片描述
cpu还没给m_cpu时,
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
析构其它的new

二、

// #include<iostream>
// using namespace std;

// //抽象类
// //抽象cpu类
// class CPU
// {
// public:
//    virtual void calcuate()=0;
// };
// //抽象显卡类
// class VideoCard
// {
// public:
//    virtual void display()=0;
// };
// //抽象内存条类
// class Memory
// {
// public:
//   virtual void storage()=0;

// };

// //电脑类
// class Computer
// {
// public:
//   //构造函数
//   Computer(CPU *cpu, VideoCard *vc, Memory *mem)
//   {
//    m_cpu = cpu;
//    m_vc = vc;
//    m_mem = mem;
//   }
//   //什么行为,提供变量工作的函数
//   void work()
//   {
//     m_cpu->calcuate();
//     m_vc->display();
//     m_mem->storage();
//   }
//   ~Computer()
// {
//   if(m_cpu!=NULL)
//   {
//     delete m_cpu;
//     m_cpu =NULL;
//   }
// if(m_vc!=NULL)
//   {
//     delete m_vc;
//     m_vc =NULL;
//   }
// if(m_mem!=NULL)
//   {
//     delete m_mem;
//     m_mem =NULL;
//   }

// }

// private:
// // 这个类先写private
//    CPU *m_cpu;     //定义一个CPU的指针
//    VideoCard *m_vc;
//    Memory *m_mem;


// };

// //具体厂商
// //intel厂商
// class IntelCPU : public CPU
// {
// public:
//    virtual void calcuate()
//    {
//     cout<<"Intel的CPU开始计算了!"<<endl;
//    }

// };

// class IntelVideoCard: public VideoCard
// {
// public:
//    virtual void display()
//    {
//     cout<<"Intel的显卡开始计算了!"<<endl;
//    }
// };

// class IntelMemory: public Memory
// {
// public:
//    virtual void storage()
//    {
//     cout<<"Intel的存储开始计算了!"<<endl;
//    }
// };

// // lenovo
// class LenovoCPU : public CPU
// {
// public:
//    virtual void calcuate()
//    {
//     cout<<"Intel的CPU开始计算了!"<<endl;
//    }

// };

// class LenovoVideoCard: public VideoCard
// {
// public:
//    virtual void display()
//    {
//     cout<<"Intel的显卡开始计算了!"<<endl;
//    }
// };

// class LenovoMemory: public Memory
// {
// public:
//    virtual void storage()
//    {
//     cout<<"Intel的存储开始计算了!"<<endl;
//    }
// };


// void test01()
// {
//     //第一台电脑零件
//     //new返回的是同类型的指针
//     //int *p= new int  或int[10]
//     CPU *IntelCpu = new IntelCPU;
//     VideoCard * IntelCard = new IntelVideoCard;
//     Memory *IntelMem = new IntelMemory;
// //创建第一台电脑
//     Computer * computer1= new Computer(IntelCpu,IntelCard,IntelMem);
//     computer1->work();
//     delete computer1;
//     //method1  继续释放new的
//     // 放在析构中
//     // delete IntelCPU;
//     // delete IntelCard;
//     // delete IntelMem;
// //创建第二台
//     cout<<"创建第二胎"<<endl;
//     CPU *LenovoCpu = new LenovoCPU;
//     VideoCard * LenovoCard = new LenovoVideoCard;
//     Memory *LenovoMem = new LenovoMemory;
//     //或者直接new
//     // Computer *computer2 = new Computer( new LenovoCPU,new LenovoVideoCard,new LenovoMemory);
//     Computer * computer2 = new Computer(LenovoCpu,LenovoCard,LenovoMem);
//     computer2->work();
//     delete computer2;

// }
// int main()
// {
//   test01();
// //   system("pause");
//   return 0;
// }


#include<iostream>
using namespace std;

class base
{

public:
// 无参构造
   base()
   {
	cout<<"父类构造"<<endl;
   }

   ~base()
   {
    cout<<"父类析构"<<endl;

   }

};
class son :public base
{
public:
	son()
	{
		cout<<"儿子构造"<<endl;
	}

  ~son()
   {
    cout<<"儿子析构"<<endl;

   }


};


int main()
{
   son x;
   return 0;
}

输出结果:

父类构造
儿子构造
儿子析构
父类析构

debug信息

Breakpoint 1, main () at /mnt/workspace/test/test.cpp:208
208     {
(gdb) s
209        son x;
(gdb) 
son::son (this=0x7ffea3799fe7) at /mnt/workspace/test/test.cpp:193
193             {
(gdb) 
base::base (this=0x7ffea3799fe7) at /mnt/workspace/test/test.cpp:179
179             cout<<"父类构造"<<endl;
(gdb) 
父类构造
180        }
(gdb) 
son::son (this=0x7ffea3799fe7) at /mnt/workspace/test/test.cpp:194
194                     cout<<"儿子构造"<<endl;
(gdb) 
儿子构造
195             }
(gdb) 
main () at /mnt/workspace/test/test.cpp:210
210        return 0;
(gdb) 
211     }
(gdb) 
son::~son (this=0x7ffea3799fe7, __in_chrg=<optimized out>) at /mnt/workspace/test/test.cpp:199
199         cout<<"儿子析构"<<endl;
(gdb) 
儿子析构
201        }
(gdb) 
base::~base (this=0x7ffea3799fe7, __in_chrg=<optimized out>) at /mnt/workspace/test/test.cpp:184
184         cout<<"父类析构"<<endl;
(gdb) 
父类析构
186        }
(gdb) 

#include
using namespace std;

class base
{
public:
virtual void sample()=0;
};

class son :public base
{
public:
virtual void sample()
{
cout<<“快得很”<<endl;
}

};

int main()
{
   son x;
   //调用方法才有输出
   x.sample();


   son *p = new son;
   p->sample();
   delete p;
   return 0;
}

输出两次,
快得很
快得很

3)

#include<iostream>
using namespace std;

class base
{
public:
 base(int &m,int &n)
 {
  m1=m;
  n1=n;
 
 }
 void prit()
 {

   cout<<"m:"<<m1<<"n:"<<n1<<endl;

 }
  // virtual void sample()=0;
  void  fun(){}
private:
  int m1;
  int n1;
};


class son :public base
{
public:
  virtual void sample()
  {
   cout<<"快得很"<<endl;
  }


};


int main()
{
  //  son x;
  //  //调用方法才有输出
  //  x.sample();
  int c=10;
  int b =20;
  //抽象类不能直接直接实例化
  base a(c,b);
  a.prit();


抽象类不能直接直接实例化,去掉虚幻书,加上fun的一个空定义

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/482154.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 150.逆波兰表达式求值

题目 思路 逆波兰表达式也是经典的栈的应用问题。 先说什么是逆波兰表达式&#xff08;也叫后缀表达式&#xff09; 我们习惯的是这样的表达式&#xff1a;1 2 / 3 ,这也叫中缀表达式。 但是对于计算机来说不好理解&#xff0c;当从左扫描到 2 的时候还需要再判断2后面是什…

损失函数篇 | YOLOv8更换损失函数之CIoU / DIoU / EIoU / GIoU / SIoU / WIoU

前言:Hello大家好,我是小哥谈。损失函数是机器学习中用来衡量模型预测值与真实值之间差异的函数。在训练模型时,我们希望通过不断调整模型参数,使得损失函数的值最小化,从而使得模型的预测值更加接近真实值。不同的损失函数适用于不同的问题,例如均方误差损失函数适用于回…

vue2从基础到高级学习笔记

在实际的工作中,我常使用vue的用法去实现效果,但是你要是问我为什么这样写,它的原理是啥就答不上来了。对vue的认知一直停留在表面,写这篇文章主要是为了理清并弄透彻vue的原理。 学习目标 1 学会一些基本用法的原理 2 弄懂vue核心设计原理 3 掌握vue高级api的用法 一 vue…

基于springboot+vue的小型诊疗预约平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

蓝桥杯-单片机基础8——上下位机的串口通信设置(附小蜜蜂课程代码)

蓝桥杯单片机组备赛指南请查看这篇文章&#xff1a;戳此跳转蓝桥杯备赛指南文章 本文章针对蓝桥杯-单片机组比赛开发板所写&#xff0c;代码可直接在比赛开发板上使用。 型号&#xff1a;国信天长4T开发板&#xff08;绿板&#xff09;&#xff0c;芯片&#xff1a;IAP15F2K6…

知识管理平台企业要怎么用?看完你就会了

在信息爆炸的现代社会&#xff0c;知识管理的重要性不言而喻。一个强大的知识管理平台&#xff0c;可以让团队分享和查找知识变得更容易&#xff0c;提升知识管理效率和整体工作效率。本文将引导你了解如何有效地利用知识管理平台。 1.确定目标和需求 在使用知识管理平台之前…

每日一题 --- 设计链表[力扣][Go]

设计链表 题目&#xff1a;707. 设计链表 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则…

使用ollama + webui 运行任意大模型

安装ollama https://hub.docker.com/r/ollama/ollama docker run -d -v ~/Documents/work/softs/docker/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama验证安装 # 进入容器docker exec -it ollama bash # 运行大模型 ollama run llama2 # 发送请求&…

硬件学习件Cadence day15 做个笔记--PCB需要生成的文件格式

1.PCB生产文件类型 如下&#xff1a; 1、*.ASM 文件&#xff1a;为电子装配图文件。焊接厂可能需要。 2、*.CAM 文件&#xff1a;为PCB制版厂所需文件。 3、*.DXF 文件&#xff1a;为导出的PCB结构CAD文件。 4、*.PCB 文件&#xff1a;为PCB设计文件。 5、*.SMD 文件&#xff1…

什么是浏览器指纹识别?Maskfog指纹浏览器有用吗?

浏览器指纹识别是好是坏&#xff1f;这现在确实是一个有争议的话题。83%的消费者经常或偶尔会根据浏览历史记录看到广告。其实这就是利用了浏览器指纹技术。 如果您想了解浏览器指纹识别是什么&#xff0c;那就看下去&#xff01; 一、什么是浏览器指纹识别 浏览器指纹是指无…

JavaSE——数据类型与变量

1. 数据类型 在 Java 中数据类型主要分为两类&#xff1a; 基本数据类型 和 引用数据类型 。 基本数据类型有 四类八种 &#xff1a; 1. 四类&#xff1a;整型、浮点型、字符型以及布尔型 2. 八种&#xff1a; 数据类型关键字内存占用范围字节型byte1 个字节-128~127短整型…

计算机实体安全

计算机实体安全定义&#xff1a; 对场地环境、设施、设备和载体、人员采取的安全对策和措施。 一、计算机可靠性与故障分析 1.1 计算机的可靠性 可靠性 (狭义) ■计算机在规定时间与条件下完成规定功能的 概率 ■规定条件&#xff1a;环境条件&#xff0c;使用条件&#xff0…

iOS应用审核问题解决方案及优化方法 ✨

摘要 本文将针对iOS应用提交审核时可能遇到的问题&#xff0c;如“你必须在Xcode中添加com.apple.developer.game-center密钥”&#xff0c;以及突然间提交送审报错情况进行探讨。通过大量查询资料和尝试&#xff0c;结合案例分析&#xff0c;提供了解决方案和优化方法&#x…

常用相似度计算方法总总结

一、欧几里得相似度 1、欧几里得相似度 公式如下所示&#xff1a; 2、自定义代码实现 import numpy as np def EuclideanDistance(x, y):import numpy as npx np.array(x)y np.array(y)return np.sqrt(np.sum(np.square(x-y)))# 示例数据 # 用户1 的A B C D E商品数据 [3.3…

自己的博客阵地(互联网核心之一 DNS)

DNS(Domain Name System)是一种用于将易记的域名映射到计算机网络中的 IP 地址的系统。它充当互联网上计算机和网络设备的地址簿&#xff0c;使人们可以使用便于记忆的域名来访问网站&#xff0c;而不必记住复杂的数字IP地址。&#xff08;完全合格域名&#xff09; 名字号联系…

卡尔曼滤波跟踪自由落体的高度程序,带MATLAB例程

背景 已知一物体做自由落体运动,对其高度进行20次测量,测量值如下表:(g=9.80m/s2). 设高度的测量误差分布为: N(0, 1),该物体的初始高度h0和速度v0分布也为高斯分布,且: 试求该物体高度和速度的随时间变化的最优估计(matlab Kalman filters)。N(0, 1),该物体的初始高…

vs2019新建Qt工程中双击 .ui 文件无法打开

vs2019 中创建的 Qt 工程&#xff0c;在使用的过程中&#xff0c;经常会有&#xff1a;双击 .ui 文件&#xff0c;闪退的情况&#xff0c;也即 .ui 文件无法打开&#xff01; 针对该问题的详细解决步骤如下&#xff1a; 1、右击该 .ui 文件&#xff0c;选择“打开方式” 2、…

GuLi商城-商品服务-API-三级分类-网关统一配置跨域

参考文档&#xff1a; https://tangzhi.blog.csdn.net/article/details/126754515 https://github.com/OYCodeSite/gulimall-learning/blob/master/docs/%E8%B0%B7%E7%B2%92%E5%95%86%E5%9F%8E%E2%80%94%E5%88%86%E5%B8%83%E5%BC%8F%E5%9F%BA%E7%A1%80.md 谷粒商城-day04-完…

LabVIEW比例流量阀自动测试系统

LabVIEW比例流量阀自动测试系统 开发了一套基于LabVIEW编程和PLC控制的比例流量阀自动测试系统。通过引入改进的FCMAC算法至测试回路的压力控制系统&#xff0c;有效提升了压力控制效果&#xff0c;展现了系统的设计理念和实现方法。 项目背景&#xff1a; 比例流量阀在液压…

在存在代理的主机上,为docker容器配置代理

1、配置Firefox的代理 (只配置域名或者ip&#xff0c;前面不加http://) 2、为容器中的Git配置代理 git config --global http.proxy http://qingteng:8080 3、Git下载时忽略证书校验 env GIT_SSL_NO_VERIFYtrue git clone https://github.com/nginx/nginx.git 4、docker的…