VC ++ 2005:私有虚函数 [英] VC++ 2005: private virtual functions

查看:82
本文介绍了VC ++ 2005:私有虚函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得不到的东西:


我们说:


ref class Base {

virtual void SomeVirtualFunction()

{Console :: WriteLine(L" Base");}

public:

void SomeAccessibleFunction()

{SomeVirtualFunction();}

};


ref class派生:public Base {

virtual void SomeVirtualFunction()

{Console :: WriteLine(L" Derived");}

};


int main(array< System :: String ^> ^ args)

{

Base ^ handle = gcnew Derived();

handle- > SomeAccessibleFunction();


返回0;

}


我希望得到Derived ;结果吧?但是,我得到了

" Base"以及编译时的奇怪警告:


" .\PrivateVirtual.cpp(8):警告C4486: ''Base :: SomeVirtualFunction'':

a ref类或值类的私有虚方法应该标记

''密封''

.. \ _PrivateVirtual.cpp(16):警告C4486:

''派生:: SomeVirtualFunction'':参考的私有虚方法

类或值课程应标记为''密封''

"


如果我尝试明确覆盖:


。 .\PrivateVirtual.cpp(17):错误C3671:''派生:: SomeVirtualFunction''

:函数不会覆盖''Base :: SomeVirtualFunction''

..\PrivateVirtual.cpp(16):警告C4486:

''派生:: SomeVirtualFunction'':参考的私有虚方法

类或值类应该标记为''密封''


这里发生了什么?

Something I don''t get it:

Say we have:

ref class Base {
virtual void SomeVirtualFunction()
{Console::WriteLine(L"Base");}
public:
void SomeAccessibleFunction()
{SomeVirtualFunction();}
};

ref class Derived : public Base {
virtual void SomeVirtualFunction()
{Console::WriteLine(L"Derived");}
};

int main(array<System::String ^> ^args)
{
Base^ handle = gcnew Derived();
handle->SomeAccessibleFunction();

return 0;
}

I would expect to get "Derived" as the result, right? However, I get
"Base", and strange warnings during compilation:

".\PrivateVirtual.cpp(8) : warning C4486: ''Base::SomeVirtualFunction'' :
a private virtual method of a ref class or value class should be marked
''sealed''
..\PrivateVirtual.cpp(16) : warning C4486:
''Derived::SomeVirtualFunction'' : a private virtual method of a ref
class or value class should be marked ''sealed''
"

If I try explicit overriding:

..\PrivateVirtual.cpp(17) : error C3671: ''Derived::SomeVirtualFunction''
: function does not override ''Base::SomeVirtualFunction''
..\PrivateVirtual.cpp(16) : warning C4486:
''Derived::SomeVirtualFunction'' : a private virtual method of a ref
class or value class should be marked ''sealed''

What is going on here?

推荐答案

嗨Nemanja!
ref class Base {
virtual void SomeVirtualFunction()
{Console :: WriteLine(L" Base");}
public:
void SomeAccessibleFunction()
{SomeVirtualFunction();}
};

ref class派生:public Base {
virtual void SomeVirtualFunction()
{Console :: WriteLine(L" Derived");}
};

int main(数组< System :: String ^> ^ args)
{
Base ^ handle = gcnew Derived();
handle-> SomeAccessibleFunction();

返回0;
}

我希望得到Derived结果吧?但是,我在编译期间得到了基础和奇怪的警告:

"。\ PrivateVirtual.cpp(8):警告C4486:''Base :: SomeVirtualFunction'' :
一个ref类或值类的私有虚方法应该标记
''sealed''
ref class Base {
virtual void SomeVirtualFunction()
{Console::WriteLine(L"Base");}
public:
void SomeAccessibleFunction()
{SomeVirtualFunction();}
};

ref class Derived : public Base {
virtual void SomeVirtualFunction()
{Console::WriteLine(L"Derived");}
};

int main(array<System::String ^> ^args)
{
Base^ handle = gcnew Derived();
handle->SomeAccessibleFunction();

return 0;
}

I would expect to get "Derived" as the result, right? However, I get
"Base", and strange warnings during compilation:

".\PrivateVirtual.cpp(8) : warning C4486: ''Base::SomeVirtualFunction'' :
a private virtual method of a ref class or value class should be marked
''sealed''




" private"虚函数没用!因为没有人可以覆盖它!


你需要声明你的虚拟功能至少为受保护!


-

问候

Jochen


关于Win32和.NET的博客
http://blog.kalmbachnet.de/


>私人"虚函数没用!因为没有人可以覆盖它!


阅读本文: http://www.gotw.ca/publications/mill18.htm

> private" virtual functions are useless! because nobody can overwrite it!

Read this article: http://www.gotw.ca/publications/mill18.htm




Jochen Kalmbach [MVP]" <无******************** @ holzma.de> skrev i

meddelandet新闻:ef ************** @ tk2msftngp13.phx.gbl ...

"Jochen Kalmbach [MVP]" <no********************@holzma.de> skrev i
meddelandet news:ef**************@tk2msftngp13.phx.gbl...
嗨Nemanja!
ref class Base {
virtual void SomeVirtualFunction()
{Console :: WriteLine(L" Base");}
public:
void SomeAccessibleFunction()
{SomeVirtualFunction();}
};

ref class派生:public Base {
virtual void SomeVirtualFunction()
{Console :: WriteLine( L" Derived");}
};

int main(数组< System :: String ^> ^ args)
{
Base ^ handle = gcnew Derived();
handle-> SomeAccessibleFunction();

返回0;
}
我希望得到Derived结果吧?但是,我在编译期间得到了基础和奇怪的警告:

"。\ PrivateVirtual.cpp(8):警告C4486:''Base :: SomeVirtualFunction''

一个ref类或值类的私有虚方法应该
标记
''密封''
ref class Base {
virtual void SomeVirtualFunction()
{Console::WriteLine(L"Base");}
public:
void SomeAccessibleFunction()
{SomeVirtualFunction();}
};

ref class Derived : public Base {
virtual void SomeVirtualFunction()
{Console::WriteLine(L"Derived");}
};

int main(array<System::String ^> ^args)
{
Base^ handle = gcnew Derived();
handle->SomeAccessibleFunction();

return 0;
}

I would expect to get "Derived" as the result, right? However, I get
"Base", and strange warnings during compilation:

".\PrivateVirtual.cpp(8) : warning C4486: ''Base::SomeVirtualFunction''
:
a private virtual method of a ref class or value class should be
marked
''sealed''



"私人"虚函数没用!因为没有人可以覆盖它!

你需要声明你的虚拟功能至少为受保护!



"private" virtual functions are useless! because nobody can overwrite
it!

You need to declare your virtual functions at least as "protected"!




但是请注意,这仅适用于托管代码。在真正的C ++中,它将会工作!
Bo Persson



But note that this is so for managed code only. In real C++ it would
have worked!
Bo Persson


这篇关于VC ++ 2005:私有虚函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆