简单的一个public继承。
#include <iostream>
using namespace std;
//代码重用 两个方式
//组合、将一个类作为另一个类的对象成员 委托
//继承
class Base
{
public:
int x_;
protected:
int y_;
private:
int z_;
};
//派生类公有继承基类
class PublicInherit:public Base
{
public:
void Test()
{
x_=10;
y_=20;//保护的成员可以在派生类中访问
//z_=30;//这行代码编译无法通过,z_是私有成员,在类外部是不能访问的。
}
private:
int a_;
};
int main(void)
{
Base b;
b.x_=30;
//b.y_=40;//编译不通过,类外部是不能访问保户的成员的。
return 0;
}
代码示例:
#include <iostream>
using namespace std;
//代码重用 两个方式
//组合、将一个类作为另一个类的对象成员 委托
//继承
class Base
{
public:
int x_;
protected:
int y_;
private:
int z_;
};
//派生类公有继承基类
class PublicInherit:public Base
{
public:
void Test()
{
x_=10;
y_=20;//保护的成员可以在派生类中访问
//z_=30;//这行代码编译无法通过,z_是私有成员,在类外部是不能访问的。
}
private:
int a_;
};
class PrivateInherit:private Base
{
public:
void Test()
{
x_=10;
y_=20;
}
};
int main(void)
{
Base b;
b.x_=30;
//b.y_=40;//编译不通过,类外部是不能访问保户的成员的。
PrivateInherit p0;
//p0.x_;//不可访问私有
PublicInherit p1;
p1.x_;
return 0;
}
对于结构体来说,没有指定继承方式,默认是公有继承,对于类来说,没有指定,默认是私有继承
对基类数据成员的重定义:
#include <iostream>
using namespace std;
class Base
{
public:
int x_;
Base():x_(0)
{
}
int GetBaseX() const
{
return x_;
}
};
//派生类公有继承基类
class Derived:public Base
{
public:
Derived():x_(0)
{
}
int GetDerivedX() const
{
return x_;
}
int x_;//派生类也定义了x_
};
int main(void)
{
Derived d;
d.x_=10; //这个时候访问的应该是派生类自身的x_ 没有重定义的话,改变的就是基类的x
cout<<d.GetBaseX()<<endl;//打印结构0
cout<<d.GetDerivedX()<<endl;//打印 结构10
return 0;
}
对基类成员函数的重定义(访问基类的成员)
#include <iostream>
using namespace std;
class Base
{
public:
int x_;
Base():x_(0)
{
}
int GetBaseX() const
{
return x_;
}
void Show()
{
cout<<"Base ...Show"<<endl;
}
};
//派生类公有继承基类
class Derived:public Base
{
public:
Derived():x_(0)
{
}
int GetDerivedX() const
{
return x_;
}
int x_;//派生类也定义了x_
void Show()
{
cout<<"Derived ...Show"<<endl;
}
void Show(int n)
{
cout<<"Derived ...Show"<<n<<endl;
}
};
int main(void)
{
Derived d;
d.x_=10; //这个时候访问的应该是派生类自身的x_
d.Base::x_=5; //访问基类的成员
cout<<d.GetBaseX()<<endl;//打印结构0
cout<<d.GetDerivedX()<<endl;//打印 结构10
d.Show();//没有重定义,调用的是基类 而如果派生类中定义了一个带参数的Show,不能编译通过
d.Base::Show();//访问基类的函数
return 0;
}