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