写一个程序,各写出重载覆盖
1 //
2 // main.cpp
3 // 2013-7-17作业2
4 //
5 // Created by 丁小未 on 13-7-17.
6 // Copyright (c) 2013年 dingxiaowei. All rights reserved.
7 //
8 //2.在一个程序中,各写出重载覆盖隐藏的成员函数
9 #include <iostream>
10 using namespace std;
11
12 class A
13 {
14
15 public:
16 void func()
17 {
18 cout<<"A的func()"<<endl;
19 }
20 void func1(int i)
21 {
22 cout<<"A的func1()"<<" 参数是:"<<i<<endl;
23 }
24 virtual void func2()
25 {
26 cout<<"A的func2()"<<endl;
27 }
28 virtual void func2(int i)
29 {
30 cout<<"A的func2()"<<" 参数是:"<<i<<endl;
31 }
32 };
33
34 class B:public A
35 {
36 public:
37 void func() //基类没有virtual关键字就是表示基类被隐藏
38 {
39 cout<<"B的func()"<<endl;
40 }
41 void func2() //基类有virtual关键字就表示基类方法被覆盖
42 {
43 cout<<"B的func2()"<<endl;
44 }
45 void func2(int i)
46 {
47 cout<<"B的func2()"<<" 参数:"<<i<<endl;
48 }
49 };
50 int main(int argc, const char * argv[])
51 {
52 A a1;
53 A *a2=&a1;
54 B b1;
55 A *a3=&b1;
56 B *b2=&b1;
57 a1.func(); //A的func()
58 a1.func1(1); //A的func1() 1
59 a2->func1(2); //A的func1() 2
60 a2->func2(3); //A的func2() 3
61 a2->func(); //A的func()
62 a3->func(); //A的func()
63 a3->func1(4); //A的func1() 4
64 a3->func2(); //B的func2()
65 a3->func2(5); //B的func2() 5
66 b1.func(); //B的func()
67 b1.func2(); //B的func2()
68 b2->func(); //B的func()
69 b2->func2(); //B的func2()
70 b2->func1(6); //A的func1() 6
71 b2->A::func2(7); //A的func2() 7
72 return 0;
73 }
如果基类中函数不是虚函数,子类也有这个同名同参数函数,那么基类函数被隐藏;如果基类中该函数是虚函数,那么就是覆盖,如果在同一个类中,两个 函数名字相同,参数或返回类型不同,那么就是属于函数的重载