final class in c++

前端 未结 7 1679
轮回少年
轮回少年 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:21

    I have modified the original code posted and verified this code in g++:

    class Temp
    {
    private:
        Temp() {
            cout << "In Temp Class ctor" << endl;
        }
        ~Temp() {}
        friend class Final;
    };
    
    class Final : virtual public Temp
    {
    public:
    
        void fun()
         {
             cout<<"In base";
         }
    };
    
    class Derived : public Final
    {
    };
    
    int main()
    {
        Derived obj;
        obj.fun();
    
        return 0;
    }
    

    Result: $g++ one.cpp -o one -lm -pthread -lgmpxx -kgmp -lreadline 2>&1

    one.cpp: In constructor 'Derived::Derived()': one.cpp:8:9: error: 'Temp::Temp()' is private Temp() {

    one.cpp:25:11: error: within this context class Derived: public Final

    one.cpp:11:9: error: 'Temp::~Temp()' is private ~Temp() {}

    one.cpp:25:11: error: within this context class Derived : public Final

    one.cpp:11:9: error: 'Temp::~Temp()' is private ~Temp() {}

    Note: It's a best practice not use void with 'main'.

    Thanks,

提交回复
热议问题