C++/CLI接口中函数重写的一些规则的例子

  1. /*
  2. (C) EnzoYang 2008
  3. Filename    : testIterface.cpp
  4. Compiler    : Visual C++ 9.0 / Visual Studio 2008
  5. Description : test about C++/CLI Interface Overriding
  6. Release     : 11/30/2008 1.0
  7. */
  8. #include "stdafx.h"
  9. using namespace System;
  10. interface class IB1
  11. {
  12.     virtual void fun();
  13.     virtual void f();
  14. };
  15. interface class IB2
  16. {
  17.     void fun();
  18. };
  19. ref class D: IB1, IB2
  20. {
  21. private:
  22.     virtual void fun1()  = IB1::fun  sealed//重写了B::fun
  23.     {
  24.         System::Console::WriteLine(L"D::fun1");
  25.     }; 
  26.     virtual void fun2() = IB2::fun  sealed//重写了IB::fun
  27.     {
  28.         System::Console::WriteLine(L"D::fun2");
  29.     }; 
  30. public:
  31.     virtual void f() 
  32.     { 
  33.         System::Console::WriteLine(L"D::f");
  34.     };
  35.     virtual void fun() //与上面的重写无冲突
  36.     { 
  37.         System::Console::WriteLine(L"D::fun");
  38.     };  
  39. }; 
  40. int main(array<System::String ^> ^args)
  41. {
  42.     //String sstr;
  43.     System::Console::WriteLine(L"********out put from an instance of D***********");
  44.     D^ d = gcnew D;
  45.     d->fun();  // "D::fun"
  46.     d->f();  //"D::f"
  47.     System::Console::WriteLine(L"********out put from an Interface IB1***********");
  48.     IB1^ ib1 = d;
  49.     ib1->fun();  //"D::fun1"
  50.     ib1->f();    //"D::f"
  51.     System::Console::WriteLine(L"********out put from an Interface IB2***********");
  52.     IB2^ ib2 = d;
  53.     ib2->fun();       // "D::fun2"
  54.     String ^str = Console::ReadLine();
  55.     return 0;
  56. }

从上面知道可以让接口中的函数在类的private中实现,也可以用与接口中那个函数不同的名字的函数取实现接口函数

 

  1. /*
  2. (C) EnzoYang 2008
  3. Filename    : testIterface.cpp
  4. Compiler    : Visual C++ 9.0 / Visual Studio 2008
  5. Description : test about C++/CLI Interface Overriding
  6. Release     : 11/30/2008 1.0
  7. */
  8. #include "stdafx.h"
  9. using namespace System;
  10. interface class IB1
  11. {
  12.     virtual void fun();
  13. };
  14. interface class IB2
  15. {
  16.     void fun();
  17. };
  18. ref class D: IB1, IB2
  19. {
  20. public:
  21.     virtual void fun() = IB1::fun
  22.     { 
  23.         System::Console::WriteLine(L"D::fun");
  24.     };  
  25. }; 
  26. int main(array<System::String ^> ^args)
  27. {
  28.     //String sstr;
  29.     System::Console::WriteLine(L"********out put from an instance of D***********");
  30.     D^ d = gcnew D;
  31.     d->fun();  //"D::fun"
  32.     System::Console::WriteLine(L"********out put from an Interface IB1***********");
  33.     IB1^ ib1 = d;
  34.     ib1->fun();  //"D::fun"
  35.     System::Console::WriteLine(L"********out put from an Interface IB2***********");
  36.     IB2^ ib2 = d;
  37.     ib2->fun();  //"D::fun"
  38.     String ^str = Console::ReadLine();
  39.     return 0;
  40. }

 

在D中的fun式指名重写IB1接口的fun函数的情况下 , 如果IB2不能够找到其它函数指名重写它里面的fun函数时,编译器就会隐式指定D中的fun也重写IB2中的fun

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值