博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 类成员函数继承(virtual、非virtual)
阅读量:6693 次
发布时间:2019-06-25

本文共 2277 字,大约阅读时间需要 7 分钟。

 
 

类继承

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

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

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

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

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

 

 1
//如果对于父类函数(virtual/非virtual),如果子类没有同名函数,则正常继承
 2
 3
class Base
 4
 5
{
 6
 7public:  void func(int i){ cout <<"Base::func(int)"<< endl; }    
 8
 9}; 
10
11 
12
13class Derived : public Base
14
15{ }; 
16
17 
18
19int main()
20
21{
22
23         Base *pb = new Derived();
24
25         pb->func(1); //Base::func(int)
26
27         delete pb; 
28
29 
30
31         Derived *pd = new Derived();
32
33         pd->func(1); //Base::func(int)
34
35         delete pd;         
36
37}
 1
//对于父类函数(virtual、非virutal),子类有同名函数,无同型函数,则不能调用父类函数
 2
 3
class Base
 4
 5
{
 6
 7public:
 8
 9     void func(int i){ cout <<"Base::func(int i)"<< endl; } 
10
11     virtual void func2(int i) { cout << "Base::func2(int i)" << endl;}
12
13}; 
14
15 
16
17class Derived : public Base
18
19{
20
21public:      
22
23      void func(){ cout <<"Derived::func()"<< endl; } 
24
25      void func2(){ cout <<"Derived::func2()"<< endl; } 
26
27}; 
28
29 
30
31int main()
32
33{
34
35         Base *pb = new Derived();
36
37         pb->func(1); //Base::func(int)
38
39         pb->func2(1); //Base::func2(int i)
40
41         delete pb; 
42
43 
44
45         Derived *pd = new Derived();
46
47         pd->func(); //Derived::func()
48
49         pd->func2(); //Derived::func2()
50
51         // pd->func2(1); //不能调用 
52
53         delete pd;       
54
55}
 1
//对于父类函数(virtual、非virtual),如果有同型函数:
 2
 3
//----非virtual函数由指针类型决定调用哪个
 4
 5
//----virtual函数由指针指向的对象决定调用哪个(运行时决定)
 6
 7
class Base
 8
 9
{  public:
10
11     void func(int i){ cout <<"Base::func(int i)"<< endl; }
12
13     void func() {cout << "Base::func() " << endl;}
14
15     virtual void func2(int i) { cout << "Base::func2(int i)" << endl;}
16
17}; 
18
19 
20
21class Derived : public Base
22
23{  public:      
24
25      void func(int i){ cout <<"Derived::func()"<< endl; } 
26
27      void func2(int i){ cout <<"Derived::func2(int i)"<< endl; } 
28
29}; 
30
31 
32
33int main()
34
35{
36
37         Base *pb = new Derived();
38
39         pb->func(1);  //Base::func(int i)
40
41         pb->func();  //Base:func()
42
43         pb->func2(1);  //Derived::func2(int i)
44
45         delete pb; 
46
47 
48
49         Derived *pd = new Derived();
50
51         pd->func(1); //Derived::func(int i)
52
53         // pd->func(); //不能调用 
54
55         pd->func2(1); //Derived::func2(int i)
56
57         delete pd;
58
59}

转载于:https://www.cnblogs.com/fire909090/p/7060527.html

你可能感兴趣的文章
Java web 实现 之 Filter分析ip统计网站的访问次数
查看>>
bzoj1303
查看>>
2015.3.12 C#运用正则表达式点滴
查看>>
CSS布局自适应等分比例
查看>>
安装Git
查看>>
设置启动图片LaunchScreen 和 LaunchImage
查看>>
L84
查看>>
L157
查看>>
L156
查看>>
第十周作业
查看>>
win10常用快捷键
查看>>
vmware搭建vSAN提示磁盘不合格或者看不到磁盘的解决办法
查看>>
ubuntu 无法解析主机的解决方法
查看>>
HashMap和Hashtable的区别
查看>>
Oracle EBS-SQL (INV-5):检查期间拉式物料领用记录数.sql
查看>>
Python之with语句原理
查看>>
在Window环境下多线程与CPU资源分配原则
查看>>
20170303新的开始
查看>>
Python--day25--复习(单继承和多继承的总结)
查看>>
@Html.EditFor()不能添加“只读”html属性;以及disable属性的坑
查看>>