C++ 类成员函数继承(virtual、非virtual)
类继承
★ 对于父类函数(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
}

浙公网安备 33010602011771号