final class in c++

前端 未结 7 1680
轮回少年
轮回少年 2020-12-31 08:36
class Temp
{
private:
    ~Temp() {}
    friend class Final;
};

class Final : virtual public Temp
{
public:
     void fun()
     {
         cout<<\"In base\";         


        
7条回答
  •  渐次进展
    2020-12-31 09:22

    Well, for this program (pleasse provide correct, compilable examples)

    #include 
    
    class Temp
    {
    private:
        ~Temp() {}
        friend class Final;
    };
    
    class Final : virtual public Temp
    {
    public:
        void fun() { std::cout<<"In base"; }
    };
    
    class Derived : public Final {};
    
    int main() {
        Derived obj;
        obj.fun();
    }
    

    Comeau Online says

    Comeau C/C++ 4.3.10.1 (Oct  6 2008 11:28:09) for ONLINE_EVALUATION_BETA2
    Copyright 1988-2008 Comeau Computing.  All rights reserved.
    MODE:strict errors C++ C++0x_extensions
    
    "ComeauTest.c", line 16: error: "Temp::~Temp()" (declared at line 6) is inaccessible
      class Derived : public Final {
                             ^
              detected during implicit generation of "Derived::Derived()" at line
                        21
    
    "ComeauTest.c", line 16: error: "Temp::~Temp()" (declared at line 6) is inaccessible
      class Derived : public Final {
            ^
              detected during implicit generation of "Derived::~Derived()" at line
                        21
    
    2 errors detected in the compilation of "ComeauTest.c".
    

    Since, when in doubt, I always trust como (I have only ever found one error in it, but many in other compilers), I suppose VC9 (which accepts the code) is in error. (From that void main() I suppose you use VC, too.)

提交回复
热议问题