继承的方式(C++)

  • 三、继承
    • 3.1 继承的方式
      • 3.1.1 公有继承
      • 3.1.2 保护继承
      • 3.2.3 私有继承

三、继承

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

注意:

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

3.1 继承的方式

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

语法格式:

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

3.1.1 公有继承

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

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

你可能感兴趣的:(c++,java,开发语言)