类成员函数继承(virtual、非virtual)

类继承

★ 对于父类函数(virtual、非virtual),如果子类没有同名函数,则正常继承

★ 对于父类函数(virtual、非virtual),如果子类有同名函数,无同型函数,则不能调用父类函数

★ 对于父类函数(virtual、非virtual),如果有同型函数:

----非virtual函数由指针类型决定调用哪个

----virtual函数由指针指向的对象决定调用哪个(运行时决定)


1//如果对于父类函数(virtual/非virtual),如果子类没有同名函数,则正常继承
 2
 3class Base
 5{
 7public:  void func(int i){ cout <<"Base::func(int)"<< endl; }    
 9}

10
13class Derived : public Base
15{ }
18
19int main()
21{
23         Base *pb = new Derived();
25         pb->func(1); //Base::func(int)
27         delete pb; 
30
31         Derived *pd = new Derived();
33         pd->func(1); //Base::func(int)
35         delete pd;         
37}

 1//对于父类函数(virtual、非virutal),子类有同名函数,无同型函数,则不能调用父类函数
 2 // 在这种情况下,父类的同名函数被隐藏了,也可以强制调用父类的同名函数 class::function_name();
 3 class  Base
 5 {
 7public:
 9     void func(int i){ cout <<"Base::func(int i)"<< endl; } 
11     virtual void func2(int i) { cout << "Base::func2(int i)" << endl;}
13}
;
16
17 class  Derived :  public  Base
19 {
21public:      
23      void func(){ cout <<"Derived::func()"<< endl; } 
25      void func2(){ cout <<"Derived::func2()"<< endl; } 
27}

30
31 int  main()
33 {
35         Base *pb = new Derived();
37         pb->func(1); //Base::func(int)
39         pb->func2(1); //Base::func2(int i)
41         delete pb; 
44
45         Derived *pd = new Derived();
47         pd->func(); //Derived::func()
49         pd->func2(); //Derived::func2()
51         // pd->func2(1); //不能调用 
53         delete pd;
55}

 1//对于父类函数(virtual、非virtual),如果有同型函数:
 3//----非virtual函数由指针类型决定调用哪个
 5//----virtual函数由指针指向的对象决定调用哪个(运行时决定)
 7class Base
 9{  public:
11     void func(int i){ cout <<"Base::func(int i)"<< endl; }
13     void func() {cout << "Base::func() " << endl;}
15     virtual void func2(int i) { cout << "Base::func2(int i)" << endl;}
17}

18
21class Derived : public Base
23{  
public :      
25      void func(int i){ cout <<"Derived::func()"<< endl; } 
27      void func2(int i){ cout <<"Derived::func2(int i)"<< endl; } 
29}; 

33int main()
35{
37         Base *pb = new Derived();
39         pb->func(1);  //Base::func(int i)
41         pb->func();  //Base:func()
43         pb->func2(1);  //Derived::func2(int i)
45         delete pb; 
48
49         Derived *pd = new Derived();
51         pd->func(1); //Derived::func(int i)
53         // pd->func(); //不能调用 
55         pd->func2(1); //Derived::func2(int i)
57         delete pd;
59}


转自:http://www.cppblog.com/liyuxia713/archive/2010/01/08/105170.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值