C++三大特性

本文详细介绍了面向对象编程中的三大核心特性:封装、继承和多态。通过具体代码实例展示了这些特性的应用,特别是如何利用多态实现动态绑定,使程序更加灵活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

封装:
把客观事物封装成抽象的类,并且类可以把自己的成员属性和成员方法只让可信的类或者对象操作,对不可信的进行信息隐藏
就是类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态。

继承:
继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的成员属性和成员方法。
继承的作用:避免公用代码的重复开发,减少代码和数据冗余

多态:
多态性可以简单地概括为“一个接口,多种方法”,字面意思为多种形态。程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念
多态的三个条件:
1有继承

2父类指针指向子类对象

3有虚函数重写

 

#include<iostream>
using namespace std;
class parten
{
public:
	parten()
	{
		age = 40;
	}
	virtual void test()
	{
		cout << "parten的年龄" << age << endl;
	}
public:
	int age;
};

class son:public parten
{
	son()
	{
		age = 60;
	}
	
	virtual void test()
	{
		cout << "son的年龄" << age << endl;
	}	

public:
	int age;
};

int main()
{
	parten* pa = new son;
	pa->test();
	system("pause");


}

运行结果是调用的是son 的成员函数

 

为什么会调用子类的成员函数呢?
因为在类中有虚函数,编译器发现我们的类中有虚函数的时候,编译器会创建一张虚函数表,把虚函数的函数入口地址放到虚函数表中,并且在类中秘密增加一个指针,这个指针就是vpointer(缩写vptr),这个指针是指向对象的虚函数表。在多态调用的时候,根据vptr指针,找到虚函数表来实现动态绑定
子类继承父类所有子类也有指向自己的虚函数指针和虚函数表,子类没有重写虚函数的时候如下图

当子类重写了虚函数的时候入下图,子类覆盖了父类的虚函数,vptr指针指向的就是子类的test函数 ,去patrten指向的空间中寻找vptr指针,通过vptr指针找到test函数,由于子类重写基类的test函数,所以调用test时,调用的是子类的test函数
图三

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值