zoukankan      html  css  js  c++  java
  • C++ inheritance examples

     1.C++继承经典例子

     1 #include <iostream>
     2 using namespace std;
     3 class Base
     4 {
     5 private:
     6     int b_number;
     7 public:
     8     Base(){}
     9     Base(int i) : b_number(i) { }
    10     int get_number() { return b_number; }
    11     void print() { cout << b_number << endl; }
    12 };
    13 
    14 class Derived : public Base
    15 {
    16 private:
    17     int d_number;
    18 public:
    19     // constructor, initializer used to initialize the base part of a Derived object.
    20     Derived(int i, int j) : Base(i), d_number(j) { };
    21     // a new member function that overrides the print( ) function in Base
    22     void print()
    23     {
    24         cout << get_number() << " ";
    25         // access number through get_number( )
    26         cout << d_number << endl;
    27     }
    28 };
    29 int main()
    30 {
    31     Base a(2);
    32     Derived b(3, 4);
    33     cout << "a is ";
    34     a.print();                // print( ) in Base
    35     cout << "b is ";
    36     b.print();                // print( ) in Derived
    37     cout << "base part of b is ";
    38     b.Base::print();                // print( ) in Base
    39     return 0;
    40 }

     2.

     1 #include <iostream>
     2 #include <cmath>
     3 using namespace std;
     4 
     5 class Point
     6 {
     7 private:
     8     double x;
     9     double y;
    10 public:
    11     Point(double i, double j) : x(i), y(j) { }
    12     void print() const
    13     {
    14         cout << "(" << x << ", " << y << ")";
    15     }
    16 };
    17 
    18 class Figure
    19 {
    20 private:
    21     Point center;
    22 public:
    23     Figure(double i = 0, double j = 0) : center(i, j) { }
    24 
    25     Point& location()
    26     {
    27         return center;
    28     }                  // return an lvalue
    29     void move(Point p)
    30     {
    31         center = p;
    32         draw();
    33     }
    34     virtual void draw() = 0; // draw the figure
    35     virtual void rotate(double) = 0;
    36     // rotate the figure by an angle                
    37 };
    38 
    39 class Circle : public Figure
    40 {
    41 private:
    42     double radius;
    43 public:
    44     Circle(double i = 0, double j = 0, double r = 0) : Figure(i, j), radius(r) { }
    45     void draw()
    46     {
    47         cout << "A circle with center ";
    48         location().print();
    49         cout << " and radius " << radius << endl;
    50     }
    51     void rotate(double)
    52     {
    53         cout << "no effect./n";
    54     }        // must be defined
    55 };
    56 
    57 class Square : public Figure
    58 {
    59 private:
    60     double side;        // length of the side
    61     double angle;        // the angle between a side and the x-axis
    62 public:
    63     Square(double i = 0, double j = 0, double d = 0, double a = 0) : Figure(i, j), side(d), angle(a) { }
    64     void draw()
    65     {
    66         cout << "A square with center ";
    67         location().print();
    68         cout << " side length " << side << ".
    "
    69             << "The angle between one side and the X-axis is " << angle << endl;
    70     }
    71     void rotate(double a)
    72     {
    73         angle += a;
    74         cout << "The angle between one side and the X-axis is " << angle << endl;
    75     }
    76     void vertices()
    77     {
    78         cout << "The vertices of the square are:
    ";
    79         // calculate coordinates of the vertices of the square
    80     }
    81 };
    82 
    83 int main()
    84 {
    85     Circle c(1, 2, 3);
    86     Square s(4, 5, 6);
    87     Figure *f = &c, &g = s;//f是指针,g是引用。
    88     f->draw();
    89     f->move(Point(2, 2));
    90     g.draw();
    91     g.rotate(1);
    92 
    93     s.vertices();
    94     // Cannot use g here since vertices( ) is not a member of Figure. 注意!!!!!!
    95     //(g是Figure类型的,而vertices是Square派生类特有的。所以通过Figure类型的对象访问不到vertices)
    96     return 0;
    97 }

     

    3.1 没有虚析构函数,继承类没有析构

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 class Thing
     6 {
     7 public:
     8     virtual void what_Am_I() { cout << "I am a Thing.
    "; }
     9     ~Thing(){ cout << "Thing destructor" << endl; }
    10 };
    11 class Animal : public Thing
    12 {
    13 public:
    14     virtual void what_Am_I() { cout << "I am an Animal.
    "; }
    15     ~Animal(){ cout << "Animal destructor" << endl; }
    16 };
    17 
    18 int main()
    19 {
    20     Thing *t = new Thing;
    21     Animal*x = new Animal;
    22     Thing* array[2];
    23     array[0] = t;                                // base pointer
    24     array[1] = x;
    25     for (int i = 0; i<2; i++)  
    26         array[i]->what_Am_I();
    27     delete array[0];
    28     delete array[1];
    29     return 0;
    30 }

     3.2.

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 class Thing
     6 {
     7 public:
     8     virtual void what_Am_I() { cout << "I am a Thing.
    "; }
     9     ~Thing(){ cout << "Thing destructor" << endl; }
    10 };
    11 
    12 class Animal : public Thing
    13 {
    14 public:
    15     virtual void what_Am_I() { cout << "I am an Animal.
    "; }
    16     ~Animal(){ cout << "Animal destructor" << endl; }
    17 };
    18 
    19 void main()
    20 {
    21     Thing t;
    22     Animal x;
    23     Thing* array[2];
    24     array[0] = &t;                        // base pointer
    25     array[1] = &x;
    26     for (int i = 0; i<2; i++)  array[i]->what_Am_I();
    27     return;
    28 }

     与上面的3.1对比。两个程序只有main函数不一样。原因大概是3.1中定义的是指针,如Thing* t=new Thing。而3.2中定义的是对象,如Thing t。对象消亡时会自动调用析构函数。指针的话需要自己去delete。所以做项目时最好用智能指针,因为能自动垃圾回收。

    4.多继承

     1 #include <iostream>
     2 using namespace std;
     3 
     4 class A
     5 {
     6 private:
     7     int a;
     8 public:
     9     A(int i) : a(i) { }
    10     virtual void print()        { cout << "a: " << a << endl; }
    11     int get_a() { return a; }
    12 };
    13 
    14 class B
    15 {
    16 private:
    17     int b;
    18 public:
    19     B(int j) : b(j) { }
    20     void print()        { cout << "b: " << b << endl; }
    21     int get_b() { return b; }
    22 };
    23 
    24 class C : public A, public B
    25 {
    26     int c;
    27 public:
    28     C(int i, int j, int k) : A(i), B(j), c(k) { }
    29     void print()
    30     {
    31         cout << "c_print begin" << endl;
    32         A::print(); B::print();
    33         cout << "c: " << c << endl;
    34         cout << "c_print end" << endl;
    35     }
    36     // use print( ) with scope resolution
    37     void get_ab()        { cout << "c-get_ab: " << get_a() << " " << get_b() << endl; }
    38     // use get_a( ) and get_b( ) without scope resolution
    39 };
    40 
    41 int main()
    42 {
    43     C x(5, 8, 10);
    44     A* ap = &x;
    45     B* bp = &x;
    46     ap->print();                // use C::print( );
    47     bp->print();                // use B::print( );
    48     //        bp -> A::print( );                // as if x is inherited from B only,
    49     // cannot access A::print( );
    50     x.A::print();                // use A::print( );
    51     x.get_ab();
    52     return 0;
    53 }

     5.共同基类的多继承

     1 #include <iostream>
     2 using namespace std;
     3 
     4 class R
     5 {
     6     int r;
     7 public:
     8     R(int anInt){ r = anInt; };
     9     void printOn(){ cout << "r=" << r << endl; };
    10 };
    11 
    12 class A : public R
    13 {
    14     int a;
    15 public:
    16     A(int int1, int int2) :R(int2){ a = int1; };
    17 };
    18 
    19 class B : public R
    20 {
    21     int b;
    22 public:
    23     B(int int1, int int2) :R(int2){ b = int1; };
    24 };
    25 
    26 class C : public A, public B
    27 {
    28     int c;
    29 public:
    30     C(int int1, int int2, int int3) :A(int2, int3), B(int2, int3){ c = int1; }
    31 };
    32 
    33 int main()
    34 {
    35     int i;
    36     R rr(10);
    37     A aa(20, 30);
    38     B bb(40, 50);
    39     C cc(5, 7, 9);
    40     rr.printOn();
    41     aa.printOn();                  //inherits R printOn  
    42     bb.printOn();                   //inherits R printOn
    43     //cc.printOn();                  //would give error
    44     return 0;
    45 }

    6.虚基类

     1 #include <iostream>
     2 using namespace std;
     3 
     4 class R
     5 {
     6     int r;
     7 public:
     8     R(int x = 0) : r(x) { }   // constructor in R
     9     void f(){ cout << "r=" << r << endl; }
    10     void printOn(){ cout << "printOn R=" << r << endl; }
    11 };
    12 
    13 class A : public virtual R
    14 {
    15     int a;
    16 public:
    17     A(int x, int y) : R(x), a(y)  { } // constructor in A
    18     void f(){ cout << "a=" << a << endl; R::f(); }
    19 };
    20 
    21 class B : public virtual R
    22 {
    23     int b;
    24 public:
    25     B(int x, int z) : R(x), b(z) { }// constructor in B
    26     void f(){ cout << "b=" << b << endl; R::f(); }
    27 };
    28 
    29 class C : public A, public B
    30 {
    31     int c;
    32 public:
    33     // constructor in C, which constructs an R object first
    34     C(int x, int y, int z, int w) : R(x), A(x, y), B(x, z), c(w) { }
    35     void f(){ cout << "c=" << c << endl; A::f(); B::f(); }
    36 };
    37 
    38 int main()
    39 {
    40     R rr(1000);
    41     A aa(2222, 444);
    42     B bb(3333, 111);
    43     C cc(1212, 345, 123, 45);
    44     cc.printOn();     //uses R printOn but only 1 R..no ambiguity
    45     cc.f();                // shows multiple call of the R::f()
    46     return 0;
    47 }

    7.

     1 #include <iostream>
     2 using namespace std;
     3 
     4 class R
     5 {
     6     int r;
     7 public:
     8     R(int x = 0) : r(x) { }   // constructor in R
     9     void f(){ cout << "r=" << r << endl; }
    10 };
    11 
    12 class A : virtual public R
    13 {
    14     int a;
    15 protected:
    16     void fA(){ cout << "a=" << a << endl; };
    17 public:
    18     A(int x, int y) : R(x), a(y)  { } // constructor in A
    19     void f() { fA(); R::f(); }
    20 };
    21 
    22 class B : virtual public R
    23 {
    24     int b;
    25 protected:
    26     void fB(){ cout << "b=" << b << endl; };
    27 public:
    28     B(int x, int y) : R(x), b(y)  { } // constructor in A
    29     void f() { fB(); R::f(); }
    30 };
    31 
    32 class C : public A, public B
    33 {
    34     int c;
    35 protected:
    36     void fC(){ cout << "c=" << c << endl; };
    37 public:
    38     C(int x, int y, int z, int w) : R(x), A(x, y), B(x, z), c(w) { }
    39     void f()
    40     {
    41         R::f();                    // acts on R stuff only
    42         A::fA();            //acts on A stuff only
    43         B::fB();                   // acts on B stuff only
    44         fC();                  // acts on C stuff only
    45     }
    46 };
    47 
    48 void main()
    49 {
    50     R rr(1000);
    51     A aa(2222, 444);
    52     B bb(3333, 111);
    53     C cc(1212, 345, 123, 45);
    54     cc.f();
    55 }

    8.私有继承

     1 #include <iostream>
     2 using namespace std;
     3 
     4 class Base
     5 {
     6 private:
     7     int priv;
     8 protected:
     9     int prot;
    10     int get_priv() { return priv; }
    11 public:
    12     int publ;
    13     Base();
    14     Base(int a, int b, int c) : priv(a), prot(b), publ(c) { }
    15     int get_prot() { return prot; }
    16     int get_publ() { return publ; }
    17 };
    18 
    19 class Derived1 : private Base        // private inheritance
    20 {
    21 public:
    22     Derived1(int a, int b, int c) : Base(a, b, c) { }
    23     int get1_priv() { return get_priv(); }
    24     // priv not accessible directly
    25     int get1_prot() { return prot; }
    26     int get1_publ() { return publ; }
    27 };
    28 
    29 class Leaf1 : public Derived1
    30 {
    31 public:
    32     Leaf1(int a, int b, int c) : Derived1(a, b, c) { }
    33     void print()
    34     {
    35         cout << "Leaf1 members: " << get1_priv() << " "
    36             //                        << get_priv( )        // not accessible
    37             << get1_prot() << " "
    38             //                        << get_prot( )         // not accessible
    39             //                        << publ         // not accessible
    40             << get1_publ() << endl;
    41     }  // data members not accessible.  get_ functions in Base not accessible
    42 };
    43 
    44 class Derived2 : protected Base // protected inheritance
    45 {
    46 public:
    47     Derived2(int a, int b, int c) : Base(a, b, c) { }
    48 };
    49 
    50 class Leaf2 : public Derived2
    51 {
    52 public:
    53     Leaf2(int a, int b, int c) : Derived2(a, b, c) { }
    54     void print()
    55     {
    56         cout << "Leaf2 members: " << get_priv() << " "
    57             //                        << priv                 // not accessible
    58             << prot << " "
    59             << publ << endl;
    60     }  // public and protected data members accessible.  get_ functions in Base accessible. 
    61 };
    62 
    63 class Derived3 : public Base  // public inheritance
    64 {
    65 public:
    66     Derived3(int a, int b, int c) : Base(a, b, c) { }
    67 };
    68 
    69 class Leaf3 : public Derived3
    70 {
    71 public:
    72     Leaf3(int a, int b, int c) : Derived3(a, b, c) { }
    73     void print()
    74     {
    75         cout << "Leaf3 members: " << get_priv() << " "
    76             << prot << " "
    77             << publ << endl;
    78     }  // public and protected data members accessible.  get_ functions in Base accessible
    79 };
    80 
    81 int main()
    82 {
    83     Derived1 d1(1, 2, 3);
    84     Derived2 d2(4, 5, 6);
    85     Derived3 d3(7, 8, 9);
    86     //        cout << d1.publ;                // not accessible
    87     //        cout << d1.get_priv( );        // not accessible
    88     //        cout << d2.publ;                // not accessible
    89     //        cout << d2.get_priv( );        // not accessible
    90     cout << d3.publ;                // OK
    91     cout << d3.get_prot();        // OK
    92     Leaf1 lf1(1, 2, 3);
    93     Leaf2 lf2(4, 5, 6);
    94     Leaf3 lf3(7, 8, 9);
    95     //         cout << lf1.publ << endl;                    // not accessible
    96     //         cout << lf2.publ << endl;                // not accessible
    97     cout << lf3.publ << endl;                 // OK
    98     return 0;
    99 }

    total:

    452  
    453  
    454 多级继承
    455 // Point-Circle-Cylinder
    456 #include <iostream.h>
    457 // THE POINT CLASS
    458 class Point
    459 {
    460 friend ostream & operator<<(ostream &,Point &);
    461 public:
    462         
    463 //  constructor
    464         Point (double xval =0, double yval=0 )
    465         { x=xval; y=yval;};  
    466 protected:       // accessed by derived class
    467         double  x;
    468         double  y;
    469 };
    470 ostream & operator << (ostream & os,
    471                               Point &  apoint)
    472 {
    473 cout <<" Point:X:Y: "<<apoint.x << "," 
    474                       << apoint.y<< "/n";
    475   return os;  
    476 }
    477 //The Circle class  inherits from class Point
    478 class Circle : public Point
    479 {
    480 friend ostream & operator<<(ostream &,Circle&);
    481 public:
    482 Circle (double r=0,double xval=0,double yval=0) 
    483                              :Point(xval,yval), radius(r)
    484 { 
    485 //radius = r;
    486 }
    487 double area()
    488 { 
    489 return (3.14159* radius *radius);
    490 }
    491 protected:
    492   double radius;
    493 };
    494 
    495 //note casting circle to point
    496 ostream & operator <<(ostream & os, Circle & aCircle)
    497 {
    498 cout<< "Circle:radius:" << aCircle.radius;
    499 os<< aCircle.x << "/n"; 
    500 os<< aCircle.y << "/n";        
    501 return os;      
    502 }
    503 // THE CYLINDER CLASS
    504 class  Cylinder  : public Circle
    505 {
    506 friend ostream & operator << (ostream & ,Cylinder &);
    507 public:
    508 Cylinder (double hv=0,double rv=0, 
    509                       double xv=0,double yv=0 )
    510                            : Circle( xv,yv,rv)
    511 {
    512 height = hv;
    513 }        
    514 double  area ( );
    515 protected:     // may have derived classes
    516         double  height;
    517 };
    518 double Cylinder :: area ( )
    519 { // Note that cylinder area uses Circle area
    520 return  2.0* Circle::area() + 2.0*3.14159* radius*height;
    521 }
    522 ostream & operator << (ostream & os,
    523                         Cylinder & acylinder)
    524 { 
    525 cout << "cylinder dimensions: ";
    526   cout << "x: " <<acylinder.x;
    527   cout << "  y: " <<acylinder.y ;
    528   cout << "  radius: " <<acylinder.radius ;
    529   cout << "  height: " <<acylinder.height 
    530                         << endl;
    531   return os; 
    532 }
    533 int main(void)
    534 {
    535 Point p(2,3);
    536 Circle c(7,6,5);
    537 Cylinder cyl(10,11,12,13);
    538 cout << p;
    539 cout << c;
    540 cout << "area of cirle:" << c.area() << endl;
    541 cout<< cyl;
    542 cout<<"area of cylinder:"<< cyl.area()<<endl ;
    543 cout<<"area of cylinder base is "  
    544                  << cyl.Circle::area() << endl;
    545 return 0;
    546 }
    547  
    548  
    549 protected 访问控制属性在继承的意义
    550  
    551 //Example of treating derived class object as base class objects. Point------Circle
    552 #include <iostream.h>
    553 // THE POINT CLASS
    554 class Point
    555 { 
    556 friend ostream & operator<<(ostream &,Circle&);
    557 public:
    558 Point (double xval =0, double yval=0 ) { x=xval; y=yval;};  
    559 public:
    560 void print()
    561 {
    562 cout <<" Point:X:Y: "<<x << "," <<y<< "/n";
    563 }
    564 protected:       // accessed by derived class
    565 double  x;    double  y;
    566 };
    567 ostream & operator << (ostream & os, Point &  apoint)
    568 {
    569 cout <<" Point:X:Y: "<<apoint.x << ","<< apoint.y<< "/n";
    570   return os;  
    571 }
    572 
    573 //The Circle class  inherits from class Point
    574 class Circle : public Point
    575 {
    576 friend ostream & operator<<(ostream &,Circle&);
    577 public:
    578 Circle (double r=0,double xval=0,double yval=0):Point(xval,yval)
    579 { radius = r;};
    580 void print()
    581 {
    582 cout<< "Circle:radius:" <<radius<<endl;
    583 cout <<" Point:X:Y: "<<x << "," <<y<< "/n";
    584 }
    585 double area()
    586 { return (3.14159* radius *radius);};
    587 protected:
    588 double radius;
    589 };
    590 //note casting circle to point
    591 ostream & operator <<(ostream & os, Circle & aCircle)
    592 {
    593 cout<< "Circle:radius:" << aCircle.radius;
    594 cout<< (Point) aCircle << "/n";           
    595 return os;      
    596 }
    597 
    598 //We will look at a few main programs based on previous class definitions. Casting and assignments
    599 void main (void )
    600 {
    601 Point p(2,3);         cout <<"Point P=  "<< p;
    602 Point pp(0,0);       cout <<"Point PP=  "<< pp;
    603 Circle c(7,6,5);     cout <<"Circle c=  "<< c;        //radius =7
    604 pp = p;             cout <<"Point PP=  "<< pp;    //built in assign =
    605 // a circle is a member of the point class so assign a circle to a point.
    606 pp = c;           //legal; also assignment O.K.
    607 cout <<"Point PP=  "<< pp;
    608 pp= (Point) c;    // but better  use the cast
    609 cout <<"Point PP=  "<< pp;  //note we get only the point part of the Circle
    610 //c = (Circle) pp;   //  illegal Cannot convert 'class Point' to 'class Circle'
    611 //c=pp;                 //illegal assignment not defined
    612 Point*  p;
    613 p = &c;
    614 P->print();    //call base class print
    615 ((Circle*)p)->print();
    616 Point& r = c;
    617 r.print();
    618 ((Circle&)r).print();
    619 }
    620  
    621 
    622 类的兼容性规则
    623  
    624 
    625 #include <iostream.h>
    626 class Base
    627 { 
    628 public:  
    629 void func( ) 
    630 {cout << "Base class function./n";} 
    631 };
    632 class Derived : public Base
    633 { 
    634 public:  
    635 void func( ) 
    636 {cout << "Derived class function./n";}
    637 };
    638 void foo(Base b)
    639 { b.func( ); }
    640 int main( )
    641 {
    642    Derived d;
    643    Base b;
    644    Base * p = &d;
    645    Base& br = d;
    646    b = d;
    647    b.func( );
    648    d.func( );
    649    p -> func( );
    650    foo(d);
    651    br.func( );
    652    return 0;
    653 }
    654  
    655  
    656 
    657  
    658 虚析构函数,防止内存泄露
    659  
    660  
    661 #include <iostream.h>
    662 #include <string.h>
    663 class Base
    664 {
    665 protected:
    666         int id;
    667         char * name;
    668 public:
    669         // default constructor
    670         Base(int a = 0, char * s = "") : id(a)
    671         {
    672                 if (!s) 
    673 { 
    674 name = NULL; 
    675 }
    676                 else
    677                 {
    678                         name = new char[strlen(s) + 1];
    679                         strcpy(name, s);
    680                 }
    681                 cout << "base default constructor/n";
    682         }
    683                 // copy constructor
    684         Base(const Base& b) : id(b.id)
    685         {
    686                 if (!b.name) { name = NULL; }
    687                 else
    688                 { 
    689                         name = new char[strlen(b.name) + 1];
    690         strcpy(name, b.name);
    691 }
    692                     cout << "base copy constructor/n";
    693         } 
    694         // destructor
    695       ~Base( ) 
    696         {
    697             if( name != NULL )        delete [ ] name; 
    698                 cout << "base destructor/n";
    699         }
    700         const Base& operator= (const Base& b);                
    701 friend ostream& operator << (ostream&, const Base&);
    702 };
    703 const Base& Base:perator= (const Base& b)
    704 {
    705         if (this != &b)                        // Check if an object is assigned to itself.
    706         {
    707              id = b.id;
    708                 delete [ ] name;                //  Destroy the old object.
    709                 if (!b.name) { name = NULL; }
    710                 else
    711                 {
    712         name = new char[strlen(b.name) + 1];
    713         strcpy(name, b.name);
    714                 }
    715         }
    716             cout << "base assignment operator/n";
    717         return *this;
    718 }
    719 ostream& operator << (ostream& out, const Base& b)
    720 {
    721         out << "Base member id = " << b.id << endl;
    722         out << "Base member name = " << b.name << endl;
    723         
    724         return out;
    725 }
    726 class Derived : public Base
    727 {
    728 private:
    729         float f;
    730         char * label;
    731 public:
    732         // default constructor
    733         Derived(int a = 0, char * s = "", float x = 0, char * t = "") : Base(a, s), f(x)
    734         {
    735                 if (!t) { label = NULL; }
    736                 else
    737                 {
    738         label = new char [strlen(t) + 1]; 
    739         strcpy(label, t);
    740 }
    741                 cout << "derived default constructor/n";
    742         }
    743         // copy constructor
    744         Derived(const Derived& d) : Base(d), f(d.f)
    745                 // d used as an instance of Base
    746         {
    747                 if(!d.label) { label = NULL; }
    748                 else
    749                 {
    750                         label = new char [strlen(d.label) + 1];
    751         strcpy(label, d.label);
    752 }
    753                 cout << "derived copy constructor/n";
    754         }
    755         // destructor
    756         ~Derived( )          
    757         {
    758                 delete [ ] label; 
    759                 cout << "derived destructor/n";
    760         }
    761         const Derived& operator= (const Derived& d);
    762 friend ostream& operator << (ostream&, const Derived&);
    763 };
    764 const Derived& Derived:perator= (const Derived& d)
    765 {
    766         if (this != &d)
    767         {
    768                 delete [ ] label;
    769                 Base:perator=(d);        //  Assign the Base part of d to the Base
    770 // part of the object that calls this operator;
    771 f = d.f;
    772 if (!d.label) { label = NULL; }
    773 else
    774 {
    775         label = new char [strlen(d.label) + 1];
    776                         strcpy(label, d.label);
    777                 }
    778                 cout << "derived assignment operator/n";
    779         }
    780         return *this;
    781 }
    782 ostream& operator << (ostream& out, const Derived& d)
    783 {
    784         out << (Base)d;                // Convert d to Base object to output Base members.
    785         out << "Derived member f = " << d.f << endl;
    786         out << "Derived member label = " << d.label << endl;
    787         return out;
    788 }
    789 int main( )
    790 {
    791         Derived d1;
    792 Derived  d2(d1);
    793         return 0;
    794 }

    http://blog.csdn.net/zhaori/article/details/1700356

  • 相关阅读:
    上台阶
    格子游戏
    找同乡
    约德尔测试
    hihocoder_week195奖券兑换
    hihocoder_week197逆序单词
    牛客网--数串
    hihocoder_offer收割编程练习赛55_3
    hihocoder_offer收割编程练习赛55_2
    hihocoder_offer收割编程练习赛55_1
  • 原文地址:https://www.cnblogs.com/forcheryl/p/4204663.html
Copyright © 2011-2022 走看看