继承分好多种,先记录点:
一、简单的
公有继承:
class Base
{
private:
int a_number;
public:
//Base(){}
Base(int i) : a_number(i) { }
int get_number()
{
return a_number;
}
void print()
{
cout << "a is: "<<a_number << endl;
}
};
class Derived : public Base
{
private:
int d_number;
public:
// constructor, initializer used to initialize the base part of a Derived object.
Derived(int i, int j) : Base(i), d_number(j) { };
// a new member function that overrides the print( ) function in Base
void print()
{
cout << "b is: " << get_number() << " ";// access number through get_number( )
cout << d_number<< endl;
}
};
int main()
{
Base a(2);
a.print();
Derived b(3, 4);// print( ) in Base
b.print(); // print( ) in Derived
cout << "base part of b is: ";
b.Base::print(); // print( ) in Base
return 0;
}
2.virtual函数的应用
class A
{
private:
int a;
public:
A(int i) : a(i) { }
virtual void print()
{
cout << a << endl;
}
int get_a()
{
//cout << "h" << endl;
return a;
}
};
class B
{
private:
int b;
public:
B(int j) : b(j) { }
void print()
{
cout << b << endl;
}
int get_b()
{
return b;
}
};
class C : public A, public B
{
int c;
public:
C(int i, int j, int k) : A(i), B(j), c(k) { }
void print()
{
cout << "f" << endl;
A::print(); B::print();
}
// use print( ) with scope resolution
void get_ab()
{
cout << get_a() << " " << get_b() << endl;
}
// use get_a( ) and get_b( ) without scope resolution
};
int main()
{
C x(5, 8, 10);
A* ap = &x; cout << "调用C:"<<endl;// use C::print( );
ap->print();
B* bp = &x; cout << "调用B:"<<endl; // use B::print( );
bp->print();
cout << ""<<endl;
x.A::print(); // use A::print( );
x.get_ab(); //use C:
return 0;
}