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

当C++的static遇上了继承

比如我们想要统计下当前类被实例化了多少次,我们通常会这么写

class A
{
public:A() { Count_++; }~A() { Count_--; }int GetCount() { return Count_; }private:static int Count_;
};class B
{
public:B() { Count_++; }~B() { Count_--; }int GetCount() { return Count_; }private:static int Count_;
};int A::Count_ = 0;
int B::Count_ = 0;int main()
{A a1, a2, a3;B b1, b2, b3, b4, b5;std::cout << a1.GetCount() << std::endl;std::cout << b1.GetCount() << std::endl;
}

输出理所当然的是 3 和 5。

1、现在做下小修改,让B继承自A,结果会发生变化吗?

class B : public A

当然会了,结果如下:

毫不意外,因为B构造的时候就会调用A的构造函数,所以,A的Count_为8,B的Count_为5.

2、再次修改,用new的方式创建

	A *a1 = new A, *a2 = new A, *a3 = new A;A *b1 = new B, *b2 = new B, *b3 = new B, *b4 = new B, *b5 = new B;std::cout << a1->GetCount() << std::endl;std::cout << b1->GetCount() << std::endl;

结果又发生变化了:

这是因为我们是定义A了来指向new出来的B, 那么 b1->GetCount()的时候其实是调用了类A的GetCount()。所以返回了8。

3、怎么样来获取实例化的B的数量呢?其实再增加一个virtual就好了

class A
{
public:A() { Count_++; }~A() { Count_--; }virtual int GetCount() { return Count_; }private:static int Count_;
};class B : public A
{
public:B() { Count_++; }~B() { Count_--; }int GetCount() { return Count_; }private:static int Count_;
};

结果又成了熟悉的8、 5。

http://www.lryc.cn/news/366593.html

相关文章:

  • Three.js中的Raycasting技术:实现3D场景交互事件的Raycaster详解
  • 5 分钟内构建一个简单的基于 Python 的 GAN
  • 智能硬件产品中常用的参数存储和管理方案
  • SwiftUI中Mask修饰符的理解与使用
  • 全光网络与传统网络架构的对比分析
  • stack overflow复现
  • mybatis使用笔记
  • 学习笔记——路由网络基础——路由概述
  • 在量子计算时代,大数据技术将面临哪些挑战和机遇?
  • 怎么换自己手机的ip地址
  • 搭建 Langchain-Chatchat 详细过程
  • C++期末复习
  • 2005-2022年各省居民人均消费支出数据(无缺失)
  • swaggerHole:针对swaggerHub的公共API安全扫描工具
  • 【Rust】——面向对象设计模式的实现
  • C#朗读语音
  • c++ 简单的日志类 CCLog
  • 一文读懂 Compose 支持 Accessibility 无障碍的原理
  • Redis到底支不支持事务?
  • 美颜相机「BeautyCam」v12.0.80 祛广告解索会员版(美妆相机功能,展现女神魅力)
  • Oracle的优化器
  • [线程与网络] 网络编程与通信原理(六):深入理解应用层http与https协议(网络编程与通信原理完结)
  • 个人博客的未来出路在哪里?
  • 【TensorFlow深度学习】实现Actor-Critic算法的关键步骤
  • 微服务架构-可见可观测与量化分析体系
  • PostgreSQL的视图pg_indexes
  • 暂停系统更新
  • Python离线查询IP地址对应的国家和城市
  • 使用Aspose技术将Excel/Word转换为PDF
  • Opencv 色彩空间