|
@@ -0,0 +1,96 @@
|
|
|
+//4.6.6 继承同名静态成员处理方式
|
|
|
+
|
|
|
+//问题:继承中同名静态成员在子类对象上如何进行访问?
|
|
|
+
|
|
|
+
|
|
|
+//静态成员和非静态成员出现同名,处理方式一致
|
|
|
+
|
|
|
+//⚪访问子类同名成员 直接访问即可
|
|
|
+
|
|
|
+//⚪访问父类同名成员 需要加作用域
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#include <iostream>
|
|
|
+
|
|
|
+
|
|
|
+class Base
|
|
|
+{
|
|
|
+public:
|
|
|
+ static int m_A;
|
|
|
+
|
|
|
+ static void func()
|
|
|
+ {
|
|
|
+ std::cout << "Base - static void func()" << std::endl;
|
|
|
+ }
|
|
|
+ static void func(int a)
|
|
|
+ {
|
|
|
+ std::cout << "Base - static void func(int a)" << std::endl;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+int Base::m_A = 100;
|
|
|
+
|
|
|
+class Son :public Base
|
|
|
+{
|
|
|
+public:
|
|
|
+ static int m_A;
|
|
|
+
|
|
|
+ static void func()
|
|
|
+ {
|
|
|
+ std::cout << "Son - static void func()" << std::endl;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+int Son::m_A = 200;
|
|
|
+
|
|
|
+//同名静态成员属性
|
|
|
+void test01()
|
|
|
+{
|
|
|
+ //1、通过对象访问
|
|
|
+ std::cout << "通过对象访问" << std::endl;
|
|
|
+ Son s;
|
|
|
+ std::cout << "Son m_A = " << s.m_A << std::endl;
|
|
|
+ std::cout << "Base m_A = " << s.Base::m_A << std::endl;
|
|
|
+
|
|
|
+ //2、通过类名访问
|
|
|
+ std::cout << "通过类名访问" << std::endl;
|
|
|
+ std::cout << "Son m_A = " << Son::m_A << std::endl;
|
|
|
+ //第一个::代表通过类名方式访问 第二个::代表通过父类作用域下的 m_A
|
|
|
+ std::cout << "Base m_A = " << Son::Base::m_A << std::endl;
|
|
|
+}
|
|
|
+
|
|
|
+//同名静态成员函数
|
|
|
+void test02()
|
|
|
+{
|
|
|
+ //1、通过对象访问
|
|
|
+ std::cout << "通过对象访问" << std::endl;
|
|
|
+ Son s;
|
|
|
+ s.func();
|
|
|
+ s.Base::func();
|
|
|
+
|
|
|
+ //2、通过类名访问
|
|
|
+ std::cout << "通过类名访问" << std::endl;
|
|
|
+ Son::func();
|
|
|
+ Son::Base::func();
|
|
|
+
|
|
|
+ //子类出现和父类同名静态成员函数,也会隐藏父类中所有同名成员函数
|
|
|
+ //如果想访问父类中被隐藏同名成员,需要加作用域
|
|
|
+
|
|
|
+ Son::Base::func(100);
|
|
|
+}
|
|
|
+
|
|
|
+int main()
|
|
|
+{
|
|
|
+ //test01();
|
|
|
+ test02();
|
|
|
+
|
|
|
+
|
|
|
+ system("pause");
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//同名静态成员处理方式和非静态处理方式一样,只不过有两种访问的方式(通过对象 和 通过类名)
|