关于作用域的名称隐藏

例程:

 1 class base{
 2 private:
 3     int x;
 4 public:
 5     virtual void mf1() = 0;
 6     virtual void mf1(int);
 7     virtual void mf2();
 8     void mf3();
 9     void mf3(double);
10 };
11 class derived :public base{
12 public:
13     virtual void mf1();
14     void mf3();
15     void mf4();
16 };

有以下调用:

1 derived d;
2 int x;
3 ...
4 d.mf1();   //derived::mf1()
5 d.mf1(x);  //错
6 d.mf2();   //base::mf2();
7 d.mf3();   //derived::mf3();
8 d.mf3(x)   //错

例程:

 1 class base{
 2 private:
 3     int x;
 4 public:
 5     virtual void mf1() = 0;
 6     virtual void mf1(int);
 7     virtual void mf2();
 8     void mf3();
 9     void mf3(double);
10 };
11 class derived :public base{
12 public:
13     using base::mf1;
14     using base::mf3;
15     virtual void mf1();
16     void mf3();
17     void mf4();
18 };

有以下调用:

1 derived d;
2 int x;
3 ...
4 d.mf1();  //derived::mf1();
5 d.mf1(x); //base::mf1(x)
6 d.mf2();   //base::mf2()
7 d.mf3();   //derived::mf3
8 d.mf3(x);  //base::mf3(x)

 

posted @ 2020-06-11 19:06  熊鑫xxx1x  阅读(371)  评论(0)    收藏  举报