1、什么是继承? 客观事物之间普遍存在层次分类关系。处于上层的事物较抽象,表达的是共性的特征;而处在下层的事物较为具体,除了共性特征外,还具有自身所专有的一些特征。
1、什么是继承?
客观事物之间普遍存在层次分类关系。处于上层的事物较抽象,表达的是共性的特征;而处在下层的事物较为具体,除了共性特征外,还具有自身所专有的一些特征。例如,人都有姓名、性别、出生日期等属性和工作生活等行为,这是共性的;个性方面,人按职业又可逐层分为很多类,在每一类中,除了具有上层的特征以外,还具有自己的特征。在面向对象编程思想中,采用继承的方法去刻画这种上下层关系。
2、继承的基本语法
class Person//先创建一个 Person类作为父类
{
public:
int age;
string name;
void fun()
{
cout << "吃饭!" << endl;
}
};
//创建doctor类做为子类,在继承Person类时方法如下:
class doctor :public Person
{
public:
void fun()
{
cout <<age<<endl<<name<< "医生看病!" << endl;
}
};
class teacher :public Person
{
//age = 30;
//name = "Tom";
public:
void fun()
{
cout <<name<<endl<<age<<endl<< "教书育人!" << endl;
}
};
void test01()
{
doctor p1;
teacher p2;
p1.age = 40; p1.name = "Tom";
p2.age = 30; p2.name = "Lisa";
p1.fun();
p2.fun();
}
虽然没有在子类中设置age和name的成员属性, 但是子类可以从父类中继承这些成员属性,就不需要再重新敲写一遍代码了。由此可见,通过继承的方式可以减少我们书写大量重复的代码。另外值得注意的是在继承的基本语法中,冒号“:”和父类名中间有一个访问权限符public。这正是三种继承方式之一。
3、三种继承方式
在父类中可能会有三种访问权限的成员,那么在使用不同的继承方式是会产生不同的效果。
1、public 公有继承
如图上图所示,公有继承时,子类不可访问父类中的私有成员,父类中的共有成员在子类中依然是公有成员,父类中的保护成员在子类中依然是保护成员。
很明显,编译器允许我们访问m_A和m_B,但并不允许我们访问私有成员m_C。
很明显,在类外编译器只允许我们访问m_A,说明m_A是公有成员,m_B是保护成员。
2、protected 保护继承
如上图所示,保护继承时,子类也不允许访问父类中的私有成员,父类中的公有成员和保护成员在子类中都是保护成员。
很明显,在类外当我们访问m_A时编译器会报错,总是m_A在父类中是公有成员,经过保护继承以后,公有成员在子类中就会变成保护成员。
3、私有继承
理解前两种继承方式,第三种就见文知意了。子类允许访问父类中的私有成员,父类中的所有成员,无论是哪种访问权限,子类私有继承之后,都会变成私有成员。
【转自:外国服务器 http://www.558idc.com/shsgf.html转载请说明出处】