继承的方式(C++)

发布时间:2023年12月28日

三、继承

继承,基于一个已有类创建新类,使新类与已有类具有同样的功能,即新类具有已有类相同的数据成员和成员函数。继承是代码重用的基本工具。已有类称为基类(父类 / 超类),新类称为派生类(子类)。

注意:

  • 基类的构造函数和析构函数不能继承
  • 基类的友元函数不能继承
  • 静态数据成员和静态成员函数不能继承

3.1 继承的方式

C++的继承可以分为公有继承、保护进程和私有进程。不同继承方式会不同程度影响基类成员在派生类的访问权限。

语法格式:

class 派生类名:继承方式 基类名{
    派生类成员声明与定义
};
访问控制限定符访问控制属性内部子类外部友元
public公有成员OKOKOKOK
protected保护成员OKOKNOOK
private私有成员OKNONOOK
基类中在公有子类中变成在保护子类中变成在私有子类中变成
公有成员公有成员保护成员私有成员
保护成员保护成员保护成员私有成员
私有成员私有成员私有成员私有成员

3.1.1 公有继承

继承方式为public的继承称为公有继承,在这种继承中,基类成员的访问权限在派生类中保持不变。

#include <iostream>
using namespace std;

class Base{ //基类
private:
	int m_a;
protected:
	int m_b;
public:
	int m_c;
	Base(int a = 1, int b = 2, int c = 3) {
		m_a = a;
		m_b = b;
		m_c = c;
	}
	int geta(){
		return m_a;
	}
};

class Dervied: public Base{ //派生类
public:
	void print() {
		//cout << m_a << endl; //error  私有成员
		cout << m_b << endl;
		cout << m_c << endl;
		cout << geta() << endl;
	}
};
int main(void) {

	Dervied test;

	//cout << test.m_a << endl; //error  私有成员
	//cout << test.m_b << endl;  //error   保护成员
	cout << test.m_c << endl;
	return 0;
}

3.1.2 保护继承

#include <iostream>
using namespace std;

class Base {
private:
	int m_a;
protected:
	int m_b;
public:
	int m_c;
	Base(int a = 1, int b = 2, int c = 3) {
		m_a = a;
		m_b = b;
		m_c = c;
	}
	int geta(){
		return m_a;
	}
};

class Dervied: protected Base{
protected:
	void print() {
		//cout << m_a << endl; //error  private
		cout << m_b << endl;
		cout << m_c << endl;
		cout << geta() << endl;
	}	
};

int main(void) {

	Dervied test;
	
//	cout << test.m_a << endl; // error  private
//	cout << test.m_b << endl; // error 类外不可访问  protected
//	cout << test.m_c << endl; // error protected继承子类中该变量变为protected成员

//	test.print(); //error  protected
	return 0;
}

3.2.3 私有继承

#include <iostream>
using namespace std;

class Base {
private:
	int m_a;
protected:
	int m_b;
public:
	int m_c;
	Base(int a = 1, int b = 2, int c = 3) {
		m_a = a;
		m_b = b;
		m_c = c;
	}
	int geta() {
		return m_a;
	}
};

class Derived : private Base{
public:
	void print(){
		//cout << m_a << endl; //error  private
		cout << m_b << endl;
		cout << m_c << endl;
		cout << geta() << endl;
	}
};
int main(void) {

	Derived test;

//	cout << test.m_a << endl; // error
//	cout << test.m_b << endl; // error
//	cout << test.m_c << endl; // error
//  cout << test.geta() << endl; // error

	return 0;
}
文章来源:https://blog.csdn.net/qq_36091214/article/details/135278478
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。