class Temp
{
private:
~Temp() {}
friend class Final;
};
class Final : virtual public Temp
{
public:
void fun()
{
cout<<"In base";
}
};
class Derived : public Final
{
};
void main()
{
Derived obj;
obj.fun();
}
上面的代码尝试实现不可继承的类(最终)。但是使用上面的代码仍然可以创建派生对象,为什么?
只有将ctor设为私有(private)才能实现所需的功能,我的问题是为什么在dtor私有(private)的情况下无法实现?
最佳答案
好吧,对于此程序(请提供正确的可编译示例)
#include <iostream>
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说
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".
因为有疑问,我总是信任como(我只发现过一个错误,但是在其他编译器中却发现了很多错误),所以我认为VC9(接受代码)出错了。 (我也想从
void main()
中也使用VC。)