问题:继承中同名的静态成员在子类对象如何访问?

静态成员和非静态成员出现同名,处理方式一致

1.访问子类同名成员 直接访问即可
2.访问父类同名成员 需要加作用域

首先我们先介绍一下静态成员属性的特点:
1.编译阶段分配内存
2.所有对象共享同一份数据
3.类内声明,类外初始化

一、同名静态成员属性
代码如下:

#include <iostream>
using namespace std;
//继承中的同名静态成员处理方式class Base {public:static int m_A;
};
int Base::m_A = 100;class Son: public Base {public:static int m_A;
};
int Son::m_A = 200;//同名静态成员属性
void test01() {Son s;//1.通过对象访问cout << "Son 下 m_A = " << s.m_A << endl;cout << "Base 下 m_A = " << s.Base::m_A << endl;//2.通过类名访问cout << "Son 下 m_A = " << Son::m_A << endl;cout << "Base 下 m_A = " << Base::m_A << endl;//第一个::代表通过类名方式访问,第二个::代表访问父类作用域下cout << "通过子类访问父类m_A = " << Son::Base::m_A << endl;}int main() {test01();return 0;
}

二、同名静态成员函数
代码如下:

#include <iostream>
using namespace std;
//继承中的同名静态成员处理方式class Base {public:static int m_A;static void func() {cout << "Base static void func()" << endl;}static void func(int a) {cout << "Base static void func(int a)" << endl;}
};
int Base::m_A = 100;class Son: public Base {public:static void func() {cout << "Son static void func()" << endl;}static int m_A;
};
int Son::m_A = 200;//同名静态成员属性
void test01() {Son s;//1.通过对象访问s.func();s.Base::func();//2.通过类外访问Son::func();Base::func();Son::Base::func();Son::Base::func(100);}int main() {test01();return 0;
}

如果子类出现与父类同名的一个静态成员函数,则父类中所有的与子类同名的函数都会被隐藏掉,调用父类同名函数时前面需要加作用域才能调用。

C++继承同名静态成员处理相关推荐

  1. c/c++入门教程 - 2.4.6 继承、公共继承、保护继承、私有继承、virtual虚继承(概念、语法、方式、构造和析构顺序、同名成员处理、继承同名静态成员处理、多继承语法、菱形继承、钻石继承)

    目录 4.6 继承 4.6.1 继承的基本语法 4.6.2 继承方式 4.6.3 继承中的对象模型 4.6.4 继承中构造和析构顺序 4.6.5 继承同名成员处理方式 4.6.6 继承同名静态成员处理 ...

  2. C++继承机制(二)——继承中的构造和析构顺序、继承同名成员的处理方式

    目录: C++继承机制(一)--基本语法.三种继承方式.继承哪些数据 C++继承机制(二)--继承中的构造和析构顺序.继承同名成员的处理方式 C++继承机制(三)--多继承.菱形继承.虚继承原理 本篇 ...

  3. c++中的继承--2(继承中的析构函数和构造函数,继承中同名成员,继承中静态成员)

    继承中的构造函数和析构函数 继承中的构造和析构顺序 子类创建对象时,先调用父类的构造,然后调用自身构造 析构顺序与构造顺序相反 子类不会继承父类的构造函数和析构函数 如果父类中没有合适默认构造,那么子 ...

  4. C++_类和对象_C++继承_同名静态成员处理_父类子类中存在同名静态成员变量_同名静态成员函数时的处理方法---C++语言工作笔记066

    然后我们再去看,同名静态成员的处理. 如果我们父类中,和子类中,同时存在一样名字的,静态成员变量,和成员函数, 我们调用子类对象.变量的时候,调用的是子类中的变量,还是父类中的变量呢? 我们写代码去验 ...

  5. C++>继承,继承方式及其比较,子类和父类对象指针,派生类的默认成员函数,虚继承,继承与友元,继承与静态成员

    继承 继承的概念与定义 概念: 继承是指一个子类(或称为派生类)继承父类(或称为基类)的特征(属性和操作).继承是面向对象程序设计时实现代码复用的重要手段,它允许在原有的类的基础上进行扩展,增加功能, ...

  6. C++继承同名成员处理方式

    C++继承同名成员处理方式 继承同名成员处理方式 问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢? 示例 总结 继承同名成员处理方式 问题:当子类与父类出现同名的成 ...

  7. C++和Java中类继承同名函数的区分

    C++和Java的派生类对于与基类同名的函数有着不同的处理方式. 在C++中,假设基类中有一个dis()函数,而派生类又定义了一个dis()函数,这时候在派生类对象中会将基类的dis()函数屏蔽掉,上 ...

  8. 类和对象—继承—同名成员处理

    静态同名成员和非静态同名成员 静态同名成员: 1.通过对象访问 2.通过类名访问 #include <iostream> using namespace std;class BaseCla ...

  9. C++从0到1的入门级教学(十三)——继承

    文章目录 13 继承 13.1 继承的基本语法 13.2 继承方式 13.3 继承的对象模型 13.4 继承中构造和析构顺序 13.5 继承同名成员处理方式 13.6 继承同名静态成员处理方式 13. ...

最新文章

  1. svn服务器搭建和使用 ubuntu_Ubuntu下 SVN 服务器搭建及使用
  2. 又踩到Dubbo的坑,但是这次我笑不出来
  3. SQL Server Mysql 对null值理解的不同
  4. Dataset:数据集集合(CV方向数据集)-常见的计算机视觉图像数据集大集合包括表面缺陷检测数据集(持续更新)
  5. 硬盘安装WIN7方法
  6. NetCore2.x 使用Log4Net(一)
  7. 一队老耗子,每个月都生一对小耗子,小耗子长3个月,第四个月开始变成老耗子开始生, // 假设所有耗子都不死,请问20个月之后共有多少只耗子?...
  8. ReentrantLock与synchronized的区别(最直观)
  9. 使计算机进入休眠状态
  10. Oracle数据库的备份方式
  11. oracle imp 换表空间,imp导入切换表空间
  12. 微信小程序解决 加载图片出现渲染层网络层错误
  13. JetpackCompose从入门到实战学习笔记2——Modifier的简单使用
  14. 字符串分割(split),将字符串按照指定字符进行分割。split(String regex)和split(String regex, int limit)
  15. 时间段查询将00:00:00更换成23:59:59
  16. 用友通-财务报表维护
  17. ADAMS仿真软件教程--模型的相关操作
  18. 表设计工具EZDML
  19. 西门子PLC远程下载S7-1200,S7-1500,S7-200SMART,WINCC远程下载
  20. Java自我学习第三章基础数据类型

热门文章

  1. IOS之提示control may reach end of non-void function
  2. Android之用Intent.FLAG_ACTIVITY_CLEAR_TOP解决界面重复拉起问题
  3. Android图片上倒计时,Android自定义照相机倒计时拍照
  4. 直男的浪漫有多可怕?
  5. 国家特级数学教授李毓佩:我们欠孩子真正的数学阅读 !
  6. linux 系统迁移到固态硬盘,把Debian GNU/Linux迁移到SSD上
  7. java赋值语句_java并发编程之原子性问题
  8. bread是可数还是不可数_雅思官方语法教程之——这个名词到底可不可数?
  9. json 格式化工具_如何在命令行中优雅地处理JSON
  10. android canvas_Android 如何实现气泡选择动画