文章目录
继承
继承是面向对象编程的一个重要概念,他允许一个类(称为子类或者派生类)从另一个类(称为分类或者基类)继承属性和行为,这使得代码重用更为容易。 继是类设计层次的复用。
C++简单的继承示例
//基类
class Animal
{
public:
//构造函数
Animal(const string & name = "大黄") :_name(name) {
}
void sleep()
{
cout << _name << "is sleeping" << endl;
}
protected:
string _name;
};
//派生类
class Dog :public Animal
{
public:
Dog()
{
_breed = "土狗";
}
void print()
{
cout << _name << endl;//派生类继承基类的_name属性
cout << _breed << endl;
}
private:
string _breed;
};
int main()
{
Dog d1;//创建派生类对象。
d1.sleep();//继承基类的成员函数
d1.print();//调用自己的成员函数
return 0;
}
继承的定义格式

继承方式和访问限定符


继承基类成员访问方式的变化

public继承
public继承是最常见的形式,它使得基类的公共成员在派生类中保持为公共成员,基类的受保护成员在派生类中保持为受保护成员。- 派生类对象可以访问基类的公共成员。
class Base {
public:
int _publicMember;
protected:
int _protectedMember;
private:
int _privateMember;
};
class Derived : public Base {
// _publicMember 在 Derived 中仍然是公共的
// _protectedMember 在 Derived 中仍然是受保护的
// _privateMember 对于 Derived 是不可见的不可访的
};
- 对于最上面的例子基类成员变量访问限定符是protected,在派生类中仍然是protected,所以在派生类print函数中可以正常访问。如果定义成private,在派生类中就不能访问了。
- private和protect访问限定符最主要的区别就在于protected可以被派生类访问,而private不可以被派生类访问。
protected继承
protected继承使得基类的公共和受保护成员在派生类中变成受保护的。- 派生类对象不能直接访问基类的公共和受保护成员。
class Base {
public:
int _publicMember;
protected:
int _protectedMember;
private:
int _privateMember;
};
class Derived : protected Base {
// _publicMember 在 Derived 中变成受保护的
// _protectedMember 在 Derived 中仍热是受保护的
// _privateMember 对于 Derived 是不可见的
};
private继承
private继承使得基类的公共和受保护成员在派生类中变成私有的。- 派生类对象不能直接访问基类的公共和受保护成员。
class Base {
public:
int _publicMember;
protected:
int ——protectedMember;
private:
int _privateMember;
};
class Derived : private Base {
// _publicMember 在 Derived 中变成私有的
// _protectedMember 在 Derived 中变成私有的
// _privateMember 对于 Derived 是不可见的
};
strcut 和 class继承的区别
class Base {
//...
};
//class默认是private继承
class Derived : Base {
//...
};
//struct默认是public继承
struct Derived : Base {
//...
};
使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好显示的写出继承方式。
- 一般使用都是public继承,几乎很少使用protetced/private继承,也不提倡 使用protetced/private继承,因为protetced/private继承下来的成员都只能在派生类的类里 面使用,实际中扩展维护性不强。
继承中的作用域
- 在继承体系中,基类和派生类都有独立的作用域
- 当基类和派生类中有同成员,派生类可以屏蔽基类对同名成员直接访问,这种情况叫做隐藏或者叫重定义。
- 在派生类中访问基类的成员需要指定作用域
基类::基类成员 显示访问
class Person
{
protected:
string _name = "张三";//姓名
string _sex = "男";//性别
int _age = 18;//年龄
int _num = 13456789;//身份证号
};
class Student : public Person
{
publ

最低0.47元/天 解锁文章
1992

被折叠的 条评论
为什么被折叠?



