继承的所有特征

本文详细介绍了C++中的继承概念,包括继承的基本语法、三种继承方式(public、protected、private)以及继承中的对象模型。还探讨了构造和析构函数的调用顺序、同名函数和静态成员的处理,特别是如何访问同名成员。此外,文章深入讨论了菱形继承问题及其解决方案——虚继承,旨在帮助读者全面理解C++的继承机制。
摘要由CSDN通过智能技术生成

目录

1. 什么是继承?

2. 继承的基本语法

3. 继承方式

3.1 public继承

3.2 protected继承

3.3 private继承

4. 继承中的对象模型

5. 构造和析构的顺序

6. 同名函数的处理

6.1 同名成员变量

6.2 同名成员函数

 7. 同名静态成员

7.1 同名静态成员变量

 7.2 同名静态成员函数

8. 继承语法

 9. 菱形继承问题

9.1 什么是菱形继承?

9.2 菱形继承带来的问题

9.3 虚继承


1. 什么是继承?

继承是面向对象的三大特征之一

继承可以理解为一个类从另一个类获取成员变量和成员函数的过程。

例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。被继承的类称为父类或基类,继承的类称为子类或派生类。

2. 继承的基本语法

class 类名:权限 父类名

//孩子有父亲的特点,并且孩子还有自身独特的特点
//父类,也称为基类
class BasePage
{
public:
	void header()
	{
		cout << "首页、公开课、登录、注册..." << endl;
	}
	void footer()
	{
		cout << "帮助中心、交流合作、站内地图" << endl;
	}
	void left()
	{
		cout << "分类" << endl;
	}
	void content()
	{
		cout << "java学科视频" << endl;
	}
};

//子类,也成为派生类
class Java :public BasePage
{
public:
	void content()
	{
		cout << "java学科视频" << endl;
	}
};
class CPP :public BasePage
{
public:
	void content()
	{
		cout << "CPP学科视频" << endl;
	}
};
void Test1()
{
	Java a;
	cout << "Java网站:" << endl;
	a.header();
	a.footer();
	a.left();
	a.content();
}
void Test2()
{
	CPP a;
	cout << "CPP网站:" << endl;
	a.header();
	a.footer();
	a.left();
	a.content();
}
int main()
{
	Test1();
	cout << "--------------------" << endl;
	Test2();
	return 0;
}

我们继承了父类中的成员函数和成员变量,并且子类中也具有它们独特的性质。 

3. 继承方式

C++中的继承分为三种:1. public继承  2. protect继承  3. private继承

3.1 public继承

//父类
class A
{
public:
	int a;
protected:
	int b;
private:
	int c;
};

//1.公共继承
class Son1 :public A
{
public:
	void func()
	{
		a = 10; //父类的公共权限 在子类仍是公共权限
		b = 20; //父类的保护权限 在子类仍是保护权限
		c = 30; //父类的私有权限 子类访问不了
	}
};

void Test1()
{
	Son1 s;
	cout << s.a << " " << s.b << endl; //保护权限在类外无法访问
	cout << s.c << endl;
}

 我们可以发现当是public继承时:

成员函数 继承前权限 继承后权限
a public public
b protected protected
c private private

如果是公共继承时,则子类继承的成员权限仍和父类相同,但子类不可以访问父类中的private成员

3.2 protected继承

class A
{
public:
	int a;
protected:
	int b;
private:
	int c;
};

//2.保护继承
class Son2 :protected A
{
public:
	void func()
	{
		a = 10; //父类的公共权限 在子类是保护权限
		b = 20; //父类的保护权限 在子类仍是保护权限
		c = 30; //父类的私有权限 子类访问不了
	}
};
void Test2()
{
	Son1 s;
	cout << s.a << " " << s.b << endl; //保护权限在类外无法访问
	cout << s.c << endl;
}

 我们可以发现当是protected继承时:

成员函数 继承前权限 继承后权限
a public</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值