您现在的位置是:首页 >其他 >C/C++:03. 继承和派生网站首页其他
C/C++:03. 继承和派生
简介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(实参列表){
//其他操作
}
总结
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。