C++继承与多态,最通俗易懂的讲解

C++继承与多态的讲解(爸爸与儿子关系)

小菜鸡也是一个普普通通的大学在读码农,对继承和多态有一些通俗易懂的讲解,希望能帮到大家,这是第一次尝试写博客以后也会经常写一些更好理解的C++的讲解。这里我采用去思考它存在的作用(好处)已经举例子更好的理解

1.总的流程

在这里插入图片描述
继承是用来继承类(基类,后边会讲),继承出来的就叫派生类。
多态指的是函数的多态,用来让函数更加的灵活,比如排序函数,让它在你需要从小到大排的时候,它能从小到大排,你让它从大到小排序的时候,它也可以在你需要的时候满足,这也就是多态(让一个函数可以在不同的情况下执行很多不同的功能)。

2.继承!爸爸与儿子的关系

在这里插入图片描述
比如,你创造了一个类,它用来储存人的各种属性,比如身高,年龄,体质,那么我们叫做它基类,为什么呢?你不论是老师,大人,小孩,学生都是人,它是这些具体人的一个基础:都为人!那么基类就会派生,什么意思呢,人又分为,老师,学生,程序员等等等,但它们有的属性都差不多,比如身高,体重这些都是有的。这些派生出来的类,就叫做派生类,你到这里就大概可以想象,爸爸是植物这个大类,比如花和草都属于植物的具体的一个情况。
基类就相当于是一个笼统的概念,而派生类,就是这个笼统的概念的一些具体情况,上述举过例子

3.(虚)函数的多态(定义了一个Shape基类,及笼统的表示图形)

在这里插入图片描述
正如基类和派生,是笼统到具体,虚函数也是,虚函数在基类里面定义,它只是告诉你有了这个函数,比如我定义在基类的函数(这种函数叫虚函数,虚的),Square()我想让它来求Shape的面积,然而这个求面积,比如圆是πR^2,矩形是ab(长乘以宽),没有具体这个Square函数的内容
基类里有虚函数,派生类里去定义虚函数的内容,就相当于,基类和虚函数,都是一个大概念而已,而派生类和派生类里面用虚函数就是详细具体的情况。

4.实战,举个具体的列子

创建基类,基类里写入虚函数

class Shape {         //一个大的概念,图形类
public:
	virtual void shuru()=0;           //输入图形的一些参数
	virtual double Square()=0;       //求图形的面积函数
	virtual double Circumference()=0;  //求图形周长函数
};     

5.派生列,具体派生了矩形和圆形

矩形类

class Rectangle :public Shape {       //矩形继承类,一个具体的图形了
	double x1, y1, x2, y2;
public:
	Rectangle(){                           //用构造函数初始化
		x1 = 0;   y1 = 0;
		x2 = 0;   y2 = 0;
	}
    //这下边三个函数都是,虚函数的具体使用
	virtual void shuru() {        //给矩形类的一些参数输入具体数据
		cout << "请输入矩形的左上角点和右下角点" << endl;
		cout << "x1=";
		cin >> x1;
		cout << "y1=";
		cin >> y1;
		cout << "x2=";
		cin >> x2;
		cout << "y2=";
		cin >> y2;
	}
	virtual double Square(){           //求面积
		cout << "面积是" << endl;
		cout << (x2 - x1) * (y1 - y2) << endl;
		return (x2 - x1) * (y1 - y2);
	}
	virtual double Circumference() {       //求周长
		cout << "周长是" << endl;
		cout << 2 * (x2 - x1) + 2 * (y1 - y2) << endl;
		return 2 * (x2 - x1) + 2 * (y1 - y2);
	}
};

圆类

class Circle :public Shape {           //圆类继承类,具体的情况了
	double x, y, r;
public:
	Circle() {                          //用构造函数初始化
		x = 0;
		y = 0;
		r = 0;
	}
	virtual void shuru() {       //这下边三个函数都是,虚函数的具体使用
		cout << "请输入圆心坐标和半径ovo" << endl;
		cout << "x=";
		cin >> x;
		cout << "y=";
		cin >> y;
		cout << "r=";
		cin >> r;
		cout << "圆心坐标为:(" << x << "," << y << ")" << endl;
	}
	virtual double Square() {    
		cout << "面积是" << endl;
		double s;
		s = pi * r * r;
		printf("%.6f\n", s);                //保留六位小数
		return pi * r * r;
	}
	virtual double Circumference()
	{   
		cout << "周长是" << endl;
		double c;
		c = 2 * pi * r;
		printf("%.6f\n", c);                //保留六位小数
		return 2 * pi * r;
	}
};

如何去主函数调用派生类和函数

用指针来使用这些函数

int main() {
	Rectangle l1;
	Circle l2;        //类实体化
	Shape* p;         //指针
	p = &l1;
	p->shuru();
	p->Square();
	p->Circumference();
	p = &l2;
	p->shuru();
	p->Square();
	p->Circumference();
	return 0;
}

~博客里有配合的代码,免费下载~

一个小菜鸡~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值