大家好,欢迎来到IT知识分享网。
class Base { public: void func(); private: void area(); protect: void get(); } class Derve:public Base { protect: using Base::func;//把继承过来的公有的函数声明成派生类的保护元素; public: using Base::get;//把继承过来的protect成员声明成public类型 private://这里只能对继承过来的可以直接使用的成员进行重新声明 }
class A { public : void get_XY() { cout << "Enter two numbers of x, y : " ; cin >> x >> y ; } void put_XY() { cout << "x = "<< x << ", y = " << y << '\n' ; } protected: int x, y ; }; class B : public A { public : int get_S() { return s ; }; void make_S() { s = x * y ; }; // 使用基类数据成员x,y protected: int s; };
对于调用基类成员里的私有成员:
#include<iostream> #include <string> using namespace std; class Person { string name;//基类的私有成员; int age; string sex; public: void set_p() { cout<<"name\tage\tsex"<<endl; cin>>name>>age>>sex; }//私有成员访问的函数; void show_p() { cout<<name<<" "<<age<<" "<<sex<<endl; } }; class student :public Person { string no; string zhuanye; string t_class; float score; public: void set_t(){ set_p(); //调用继承于基类的成员函数访问继承于基类的私有数据成员 cin>>zhuanye>>t_class>>score; /*若这里派生类的函数名跟基类函数名一样那么基类的函数就被隐藏了; void set(){ //隐藏了基类中的同名成员 Person::set(); //调用继承于基类的成员函数访问继承于基类的数据成员 */ } void show_t() { show_p(); cout<<zhuanye<<" "<<t_class<<" "<<score<<endl; } };
同理若基类成员与派生类成员重名,
class base { public : int a , b ; } ; class derived : public base { public : int b , c ; } ; void f () { derived d ; d . a = 1 ; d . base :: b = 2 ;//基类的成员 d . b = 3 ; d . c = 4 ; };可以这样来处理 同样的出现了同名函数 class B : public A { public: int b1, b2 ; B( int j1=1, int j2=1 ) { b1 = j1; b2 = j2; } void print() //定义同名函数 void printAB() { A::print() ; //派生类对象调用基类版本同名成员函数 print() ; //派生类对象调用自身的成员函数 } }; int main() { B b ; b.A::print(); b.printAB(); }
class parent_class { int data1 , data2 ; public : parent_class ( int p1 , int p2 ) { data1 = p1; data2 = p2; }//基类构造函数 int inc1 () { return ++ data1; } int inc2 () { return ++ data2 ; } void display () {cout << "data1=" << data1 << " , data2=" << data2 << endl ; } }; class derived_class : private parent_class { int data3 ; parent_class data4 ; public: derived_class ( int p1 , int p2 , int p3 , int p4 , int p5 ): parent_class ( p1 , p2 ) /*基类构造函数*/, data4 ( p3 , p4 )一个基类的对象 { data3 = p5 ; }//派生类的初始 int inc1 ( ) { return parent_class :: inc1 ( ) ; } int inc3 ( ) { return ++ data3 ; } void display ( ) { parent_class :: display ( ) ; data4.display ( ) ; cout << "data3=" << data3 << endl ; } } ;
class Base { public : Base(char xx) { x = xx; } void who() { cout << "Base class: " << x << "\n" ; } protected: char x; } ; class First_d : public Base { public : First_d(char xx, char yy):Base(xx) { y = yy; } void who() { cout << "First derived class: "<< x << ", " << y << "\n" ; } protected: char y; } ; class Second_d : public First_d { public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) { z = zz; } void who() { cout << "Second derived class: "<< x << ", " << y << ", " << z << "\n" ; } protected: char z; } ; int main() { Base B_obj( 'A' ) ; First_d F_obj( 'T', 'O' ) ; Second_d S_obj( 'E', 'N', 'D' ) ; Base * p ; p = & B_obj ; p -> who() ; p = &F_obj ; p -> who() ; p = &S_obj ; p -> who() ; F_obj.who() ; ( ( Second_d * ) p ) -> who() ; }
class A { public: ~A(){ cout << "A::~A() is called.\n" ; } } ; class B : public A { public: ~B(){ cout << "B::~B() is called.\n" ; } } ; int main() { A *Ap = new B ; B *Bp2 = new B ; cout << "delete first object:\n" ; delete Ap; cout << "delete second object:\n" ; delete Bp2 ; }
class A { public: virtual double funA(double x) { cout<<"funA of class A called."<<endl; return x*x; } double funB(double x) { return funA(x)/2; } }; class B:public A { public: virtual double funA(double x) { cout<<"funA of class B called."<<endl; return 2*x*x; } }; class C:public B { public: virtual double funA(double x) { cout<<"funA of class C called."<<endl; return 3*x*x; } }; void main() { C objc; cout<<objc.funB(3)<<endl; B objb; cout<<objb.funB(3)<<endl; }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120974.html