C++/CLI类函数重写规则的一些例子

  1. /*
  2. (C) EnzoYang 2008
  3. Filename    : testoverride.cpp
  4. Compiler    : Visual C++ 9.0 / Visual Studio 2008
  5. Description : test about C++/CLI override
  6. Release     : 11/30/2008 1.0
  7. */
  8. #include "stdafx.h"
  9. using namespace System;
  10. ref class B abstract
  11. {
  12. public:
  13.     virtual void fun() abstract;
  14.     virtual void f() abstract;
  15.     virtual void error() {System::Console::WriteLine(L"myerror");};
  16. };
  17. interface class IB
  18. {
  19.     void fun();
  20. };
  21. ref class D: B, IB
  22. {
  23. public:
  24.     virtual void fun1()  = B::fun  //重写了B::fun
  25.     {
  26.         System::Console::WriteLine(L"b::fun");
  27.     }; 
  28.     virtual void fun2() = IB::fun  //重写了IB::fun
  29.     {
  30.         System::Console::WriteLine(L"ib::fun");
  31.     }; 
  32.     virtual void f() override 
  33.     { 
  34.         System::Console::WriteLine(L"f");
  35.     };
  36.     virtual void fun() new //与上面的重写无冲突
  37.     { 
  38.         System::Console::WriteLine(L"hello");
  39.     };  
  40.     virtual void error() new = B::error //正确 但是error依然是重写了B::error
  41.     { 
  42.         System::Console::WriteLine(L"error");
  43.     }; 
  44.     //***1***virtual void error() new { System::Console::WriteLine(L"error");};     
  45.     //正确 error只是隐藏了 B::error
  46.     //virtual void error() override = B::error  { System::Console::WriteLine(L"error");};    
  47.     //错误 ,error 不能被多次重写,这里显式和隐式各一次了
  48.     //virtual void error() override = B::error  { System::Console::WriteLine(L"error");};    
  49.     //错误同上
  50. };
  51. int main(array<System::String ^> ^args)
  52. {
  53.     //String sstr;
  54.     D^ d = gcnew D;
  55.     d->fun();
  56.     d->fun1();
  57.     d->fun2();
  58.     d->f();
  59.     B^ b = d;
  60.     b->fun();
  61.     b->error(); // 这里的输出是error 如果用注释中的***1***那条语句的话输出时myerror
  62.     IB^ ib = d;
  63.     ib->fun();
  64.     String ^str = Console::ReadLine();
  65.     return 0;
  66. }

输出结果

hello

b::fun

ib::fun

f

b::fun

error

ib::fun

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值