C++继承

继承

继承是面向对象编程的一个重要概念,他允许一个类(称为子类或者派生类)从另一个类(称为分类或者基类)继承属性和行为,这使得代码重用更为容易。 继是类设计层次的复用。

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;
}

继承的定义格式

image.png

继承方式和访问限定符

image.png

image.png

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

image.png

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++下等马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值