您现在的位置是:首页 >其他 >C/C++:03. 继承和派生网站首页其他

C/C++:03. 继承和派生

动弹动弹 2024-06-17 11:19:14
简介C/C++:03. 继承和派生


前言


1 C++继承和派生简单介绍

继承派生是同一回事,继承是站在子类的角度,派生是站在父类的角度。

C++继承的一般语法:

class 派生类名:[继承方式] 基类名{
	派生类新增加的成员
};

2 继承的三种方式

public

  • 基类中所有的public成员在派生类中为public属性
  • 基类中所有的protected成员在派生类中为protected属性
  • 基类中所有的private成员在派生类中不能访问

protected

  • 基类中所有的public成员在派生类中为protected属性
  • 基类中所有的protected成员在派生类中为protected属性
  • 基类中所有的private成员在派生类中不能访问

private

  • 基类中的所有public成员在派生类中均为private属性
  • 基类中的所有protected成员在派生类中均为private属性
  • 基类中的所有private成员在派生类中均不能访问

注意:实际上,基类的 private 成员是能够被继承的,并且(成员变量)会占用派生类对象的内存,它只是在派生类中不可见,导致无法使用罢了

通过using来改变访问权限

using 只能改变基类中 public 和 protected 成员的访问权限,不能改变 private 成员的访问权限,因为基类中 private 成员在派生类中是不可见的,根本不能使用,所以基类中的 private 成员在派生类中无论如何都不能访问。

#include<iostream>
using namespace std;
//基类People
class People {
public:
    void show();
protected:
    char *m_name;
    int m_age;
};
void People::show() {
    cout << m_name << "的年龄是" << m_age << endl;
}
//派生类Student
class Student : public People {
public:
    void learning();
public:
    using People::m_name;  //将protected改为public
    using People::m_age;  //将protected改为public
    float m_score;
private:
    using People::show;  //将public改为private
};
void Student::learning() {
    cout << "我是" << m_name << ",今年" << m_age << "岁,这次考了" << m_score << "分!" << endl;
}

C++ 继承时名字遮蔽问题

遮蔽和重载

  • 重载指的是在同一个类中,有多个名相同的成员函数,这些成员函数参数列表和返回值类型有所不同,构成了函数重载。
  • 遮蔽指 在派生类中,派生类中成员(包括成员变量和成员函数)与基类中的成员重名,在派生类中使用该成员时,使用的是派生类中的成员,而不是基类中的(如果遮蔽的是成员函数,会将基类中重载的所有函数都遮蔽)。

C++多继承

多继承表示派生类可以有两个或者多个父类。

class D: public A, private B, protected C{
    //类D新增加的成员
}

多继承形式下的构造函数和单继承形式基本相同,只是要在派生类的构造函数中调用多个基类的构造函数。以上面的 A、B、C、D 类为例,D 类构造函数的写法为:

D(形参列表): A(实参列表), B(实参列表), C(实参列表){
    //其他操作
}

总结

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。