在C ++中覆盖函数

时间:2012-04-07 22:25:19

标签: c++ class overloading

我试图阻止B级访问DoSomething(Y类)功能,只访问DoSomething(Class X)。我怎么能用C ++做到这一点?。

Class A {
    public:
        void DoSomething(Class Y);
}

Class B: public A { 
    public:
        void DoSomething(Class X);   
}

2 个答案:

答案 0 :(得分:3)

你可以A::DoSomething(Class Y) private,这就是你可以采取的唯一方法。

另外,你不是在这里,而是在躲藏。不过,在class(是的,它是小写,而不是大写)B中,您仍然可以调用A::DoSomething()private是拒绝访问的唯一方法。

答案 1 :(得分:1)

  

我试图阻止B级访问DoSomething(Class Y)。我怎么能用C ++做到这一点?

像这样:

class X {};
class Y {};

class A {
    public:
        void DoSomething(class Y);
};

class B: public A {
    public:
        void DoSomething(class X);
};

int main () {
  B b;
  Y y;
  b.DoSomething(y);

  // Note that b can still access DoSomething(y) if you want it to:
  b.A::DoSomething(y);
}

请注意这在g ++中生成的错误消息:

g++ -ansi -pedantic -Wall -Werror    b.cc   -o b
b.cc: In function ‘int main()’:
b.cc:17:18: error: no matching function for call to ‘B::DoSomething(Y&)’
b.cc:17:18: note: candidate is:
b.cc:11:14: note: void B::DoSomething(X)
b.cc:11:14: note:   no known conversion for argument 1 from ‘Y’ to ‘X’