1.非静态成员
#include<iostream>
#include<string>
using namespace std;
//同名成员处理
class base {
public:
base() {
m_a=10;
}
int m_a;
void fun() {
cout << "base-fun的调用" << endl;
}
void fun(int a) {
cout << "base-fun(int a)的调用" << endl;
}
};
class son :public base {
protected:
int b;
public:
int m_a;
son() {
b = 10;
m_a = 200;
}
void fun() {
cout << "son-fun的调用" << endl;
}
};
int main()
{
son a;
//子类对象可以直接访问到子类中同名成员
cout << "son下的m_a="<<a.m_a << endl;
//如果通过子类对象访问父类中的同名成员,需要加作用域(类名::)
cout << "base下的m_a=" << a.base::m_a << endl;
a.fun();
a.base::fun();
a.base::fun(10);
//如果想访问父类中被隐藏的成员函数,需要加作用域
system("pause");
return 0;
}
2.静态成员
#include<iostream>
#include<string>
using namespace std;
//同名静态成员处理
class base {
public:
static int m_a;
static void fun() {
cout << "base-fun的调用" << endl;
}
static void fun(int a) {
cout << "base-fun(int a)的调用" << endl;
}
};
//静态成员函数类内声明,类外初始化
int base::m_a = 10;
class son :public base {
public:
static int m_a;
static void fun() {
cout << "base-fun的调用" << endl;
}
};
int son::m_a = 200;
void test1() {
cout << "1.通过对象访问" << endl;
son s;
cout << "son下的m_a" << s.m_a << endl;
cout << "base下的m_a" << s.base::m_a << endl;
cout << "2.通过类名访问" << endl;
cout << "son下的m_a" << son::m_a << endl;
cout << "base下的m_a" << base::m_a << endl;
//第一个代表通过类名访问 第二个代表访问父类作用域下
cout << "base下的m_a" << son::base::m_a << endl;
}
void test2() {
son s1;
cout << "1.通过对象访问" << endl;
s1.fun();
s1.base::fun();
cout << "2.通过类名访问" << endl;
son::fun();
son::base::fun();
son::base::fun(10);
}
int main()
{
test1();
test2();
system("pause");
return 0;
}
//同名的静态成员处理方式和非静态成员的处理方式相同,静态可以通过类名和对象名两种方式访问