c++中的继承
继承是c++中一个很重要的概念。
一. 继承的概念
通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。
继承是面向对象中类被复用的重要手段,通过继承定义一个类,继承是类型之间的关系建模,共享共有的东西。实现各自本质不同的东西。
继承后,父类的所有成员都会变成子类的一部分。不论是公有、保护或私有成员。不会被继承的是静态成员。
二. 继承的分类
继承有三种:
- 共有继承
- 私有继承
- 保护继承
被继承的类叫基类也叫父类。产生的新类叫做是派生类或者子类。
在被继承之后,他们的关系如下:
我们可以得到如下结论:
1.因为任何一个类的私有成员是不可以被外界访问的,除非是友元函数,所以基类的私有成员不论在这三种哪一种继承方式下,都是不可以被访问的,被外界所看不到的。
2.公有继承是在父类中是什么成员,在子类中也还是什么成员,在父类中是公有成员,那么在子类中还是公有成员。在父类中是保护成员在子类中依旧是保护成员,私有成员是不可见的,继承不了。
3.保护继承也比较好理解,就是将所有不是私有的成员全都继承为保护的成员,不论在父类中是公有成员还是保护成员,在子类中全部都是保护的成员。
4.私有继承是将所有不是私有成员的成员继承为私有成员。父类中的公有成员与保护成员都被子类继承为私有成员。
在一个类中,若是不想让自己的对象直接访问自己的成员,就可以定义为私有的,那如果想让继承的子类访问,我们就应该将这个成员定义为保护成员,保护成员对外是与私有一样的,都不可以被对象直接访问。但是在继承中,保护的成员可以让子类访问到。
三. 类的赋值问题
#include <iostream>
using namespace std;
class Person
{
public:
Person(const string str)
{
_name = str;
}
void display()
{
cout<<_name<<endl;
}
private:
string _name;
};
class Student:public Person
{
public:
Student(const string str,int num)
:Person(str)
,_num(num)
{}
void show()
{
cout<<_num<<endl;
}
private:
int _num;
};
int main()
{
Person p("peter");
Student s("tom",10);
s.show();
p = s;
p.display();
return 0;
}
p是用“peter”初始化的, s是用tom初始化的,经过赋值,将s的值赋给p,p的值就变为了tom。
从这个例子可以看出来,子类是可以赋值给父类的。