说明:学生类是人类的扩充,学生类里有普通人类里没有的属性 ,加了点属于学生自有的东西。
当你继承一个父类的时候,父类里所有的东西都有了。
例一:继承时构造函数调用情况
#includeusing namespace std; class A { public: A() :i(0) { cout << "A::A()" << endl; } ~A() { cout << "A::~A()" << endl; } void print() { cout << "A::f()" << endl; } void set(int ii) { i = ii; } private: int i; }; class B :public A { }; int main() { B b; b.set(10); b.print(); return 0; }
输出:
例二:调用父类public函数
#includeusing namespace std; class A { public: A() :i(0) { cout << "A::A()" << endl; } ~A() { cout << "A::~A()" << endl; } void print() { cout << "A::f()" << i << endl; } void set(int ii) { i = ii; } private: int i; }; class B :public A { public: void f() { set(20); print(); } //调用父类public函数 }; int main() { B b; b.set(10); b.print(); b.f(); return 0; }
输出:
例三:析构函数输出顺序
#includeusing namespace std; class A { public: A(int ii) :i(0) { cout << "A::A(int ii)" << endl; } //要求有显示的不带参数的构造函数初始化 i ~A() { cout << "A::~A()" << endl; } void print() { cout << "A::f()" << i << endl; } void set(int ii) { i = ii; } protected: void use() { cout << "A::use()" << i + 1 << endl; } private: int i; }; class B :public A { public: B():A(15){ cout << "B::A()" << endl; }; ~B() { cout << "B::~B()" << endl; } void f() { set(20); // i = 30; //父类的private子类不能用 print(); use(); } }; int main() { B b; b.set(10); b.print(); b.f(); //b.use(); //父类中的protected,对象不能用 return 0; }
输出:
例四:隐藏同名函数
#includeusing namespace std; class A { public: A(int ii) :i(0) { cout << "A::A(int ii)" << endl; } //要求有显示的不带参数的构造函数初始化 i ~A() { cout << "A::~A()" << endl; } void print() { cout << "A::print()" << i << endl; } void print(int i) { cout << "A:print(int i):i:" << i; print(); } void set(int ii) { i = ii; } protected: void use() { cout << "A::use()" << i + 1 << endl; } private: int i; }; class B :public A { public: B():A(15){ cout << "B::A()" << endl; }; ~B() { cout << "B::~B()" << endl; } void print() { cout << "B::print()" << endl; } void f() { set(20); // i = 30; //父类的private子类不能用 print(); use(); } }; int main() { B b; b.set(10); b.print(); b.f(); //b.use(); //父类中的protected,对象不能用 //b.print(200);//B中的print()隐藏了A中print()和print(int),也就是隐藏了所有同名的函数,不管参数是什么都隐藏 b.A::print(100); return 0; }



