http://www.cppblog.com/liyuxia713/archive/2010/01/08/105170.html
类继承
★ 对于父类函数(virtual、非virtual),如果子类没有同名函数,则正常继承
★ 对于父类函数(virtual、非virtual),如果子类有同名函数,无同型函数,则不能调用父类函数
★ 对于父类函数(virtual、非virtual),如果有同型函数:
----非virtual函数由指针类型决定调用哪个
----virtual函数由指针指向的对象决定调用哪个(运行时决定)
1
//
如果对于父类函数(virtual/非virtual),如果子类没有同名函数,则正常继承
2
3
class
Base
4
5
{
6
7
public: void func(int i)
{ cout <<"Base::func(int)"<< endl; }
8
9
}
;
10
11
12
13
class
Derived :
public
Base
14
15
{ }
;
16
17
18
19
int
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
}
//
如果对于父类函数(virtual/非virtual),如果子类没有同名函数,则正常继承
2
3
class
Base4

5

{6

7

public: void func(int i)
{ cout <<"Base::func(int)"<< endl; } 8

9
}
; 10

11
12

13
class
Derived :
public
Base14

15

{ }
; 16

17
18

19
int
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
7
public:
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
17
class
Derived :
public
Base
18
19
{
20
21
public:
22
23
void func()
{ cout <<"Derived::func()"<< endl; }
24
25
void func2()
{ cout <<"Derived::func2()"<< endl; }
26
27
}
;
28
29
30
31
int
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
}
//
对于父类函数(virtual、非virutal),子类有同名函数,无同型函数,则不能调用父类函数
2
3
class
Base4

5

{6

7
public: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

17
class
Derived :
public
Base18

19

{20

21
public: 22

23

void func()
{ cout <<"Derived::func()"<< endl; } 24

25

void func2()
{ cout <<"Derived::func2()"<< endl; } 26

27
}
; 28

29
30

31
int
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
21
class
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
33
int
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
}
//
对于父类函数(virtual、非virtual),如果有同型函数:2

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

5
//
----virtual函数由指针指向的对象决定调用哪个(运行时决定)
6
7
class
Base8

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

21
class
Derived :
public
Base22

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

33
int
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
}
本文详细解释了C++中类继承与函数重载的原理与使用方法,包括虚拟函数、非虚拟函数的继承行为,以及如何在子类中重写父类函数。
&spm=1001.2101.3001.5002&articleId=6675693&d=1&t=3&u=adbff82875ae4b2a8009fa393936b2b1)
1225

被折叠的 条评论
为什么被折叠?



