父子间的冲突
#include <iostream>
#include <string>
using namespace std;
class Parent
{
public:
int mi;
};
class Child : Parent
{
public:
int mi;
};
int main()
{
Child c;
c.mi = 100;
cout << c.mi << endl;
return 0;
}
- 子类可以定义父类的同名成员
- 子类中的成员将隐藏父类中的同名成员
- 父类的同名成员依然在子类中
- 通过作用域分辨符(::)访问父类中的同名成员
#include <iostream>
#include <string>
using namespace std;
namespace A
{
int g_i = 0;
}
namespace B
{
int g_i = 0;
}
class Parent
{
public:
int mi;
Parent()
{
cout << "Parent(): &mi = " << &mi << endl;
}
};
class Child : public Parent
{
public:
int mi;
Child()
{
cout << "Child(): &mi = " << &mi << endl;
}
};
int main()
{
Child c;
c.mi = 100;
c.Parent::mi = 1000;
cout << "&c.mi = " << &c.mi << endl;
cout << "c.mi = " << c.mi << endl;
cout << "&c.Parent::mi = " << &c.Parent::mi << endl;
cout << "c.Parent::mi = " << c.Parent::mi << endl;
return 0;
}
类成员函数重载
成员函数的冲突
#include <iostream>
#include <string>
using namespace std;
class Parent
{
public:
int mi;
void add(int v)
{
mi = v;
}
void add(int a, int b)
{
mi += (a+b) ;
}
};
class Child : public Parent
{
public:
int mi;
void add(int v)
{
mi = v;
}
void add(int a, int b)
{
mi += (a+b) ;
}
void add(int x, int y, int z)
{
mi += (x+y+z) ;
}
};
int main()
{
Child c;
c.mi = 100;
c.Parent::mi = 1000;
cout << "c.mi = " << c.mi << endl;
cout << "c.Parent::mi = " << c.Parent::mi << endl;
c.add(1);
c.add(2,3);
c.add(4,5,6);
cout << "c.mi = " << c.mi << endl;
cout << "c.Parent::mi = " << c.Parent::mi << endl;
return 0;
}
- 子类函数会隐藏父类的同名函数
- 子类无法重载父类中的成员函数(作用域不同)
- 使用作用域分辨符访问父类同名函数
- 子类可以定义父类完全相同的函数
总结
- 子类函数会隐藏父类的同名函数
- 子类无法重载父类中的成员函数(作用域不同)
- 使用作用域分辨符访问父类同名函数
- 子类可以定义父类完全相同的函数