5.组合与继承

1.面向对象

在C++中,面向对象(Object-Oriented)是一种程序设计范式,它使用"对象"来设计应用程序和软件。面向对象编程(OOP)的核心概念包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态性(Polymorphism)。

  1. 类(Class):类是对某一类对象的抽象描述,它定义了对象的属性和方法。属性通常表现为类的数据成员,而方法则是类的成员函数。

  2. 对象(Object):对象是类的实例。每个对象都有它自己的属性(即类的数据成员的值)和方法(即类的成员函数)。

  3. 封装(Encapsulation):封装是隐藏对象的属性和实现细节,仅对外提供公共接口。这有助于保护数据不被外部直接访问和修改,并且使得代码更易于维护和理解。

  4. 继承(Inheritance):继承允许一个类(派生类)继承另一个类(基类)的属性和方法。这使得代码重用成为可能,并有助于构建层次化的类结构。

  5. 多态性(Polymorphism):多态性意味着一个接口可以有多种实现方式。在C++中,这通常通过虚函数和继承实现。多态性允许我们编写更加通用和灵活的代码。

2.组合

在C++中,组合(Composition)是一种面向对象设计原则,指的是一个类的对象包含其他类的对象作为其数据成员。通过组合,一个类可以重用其他类的功能,并将其纳入自己的实现中。这种关系是一种"有"的关系,即一个对象"有"另一个对象作为其一部分。

组合是面向对象编程中代码重用和封装的重要手段之一。通过组合,你可以创建更复杂的对象,这些对象由更简单的对象组成,从而实现了功能的层次化和模块化。

复制代码
#include <stdio.h>  

class ARR{
public:	
	ARR():tail(0){}
	void addtail(int data);
	void show(void);//
private:	
	int data[100];	
	int tail;
};

void ARR::addtail(int data){
	this->data[tail++] = data;
}
void ARR::show(void){
	int i = 0;
	for(;i<tail; i++)	
		printf("%d, ", data[i]);
	printf("\n");
}

class Stume{
public: 
		Stume(){}
		~Stume(){}

		void savescore(int score)	{
			scorearr.addtail(score);	
		
		}	
		void showscore(void){	
			scorearr.show();
		}
private:
		ARR scorearr;
};

int main() {  
	Stume mmm;
	mmm.savescore(1);
    mmm.savescore(2);  
	mmm.savescore(3);  
	mmm.showscore();
    return 0;  
}

3.继承(基类、派生类)

举例:

复制代码
#include <stdio.h>  
#include <iostream>

using namespace std;

class ARR{
public:	
	ARR() {}
	~ARR(){}
	void show(void){


		cout << "XXXXXXXXXXX" << endl;
	}
};

int main() {  
	ARR a;
	a.show();	
    return 0;  
}

#include <stdio.h>  
#include <iostream>

using namespace std;

class A{
public:	
	A() {}
	~A(){}
	void showx(void){


		cout << "XXXXXXXXXXX" << endl;
	}
};

/* AX类是A类的升级版,(这种也叫派生,同时也叫继承)
*  A为AX的基类
*  AX为A的派生
*  AX具有A的全部功能,并且添加了新的功能
*/
class AX:public A{
public:	
	void showy(void){


		cout << "YYYYYYYYYYYY" << endl;
	}
};

int main() {  
	A a;
	a.showx();	

	AX b;
	b.showx();
	b.showy();
    return 0;  
}
相关推荐
流星52112214 小时前
GC 如何判断对象该回收?从可达性分析到回收时机的关键逻辑
java·jvm·笔记·学习·算法
JanelSirry14 小时前
我的应用 Full GC 频繁,怎么优化?
jvm
JH307315 小时前
jvm,tomcat,spring的bean容器,三者的关系
jvm·spring·tomcat
DKPT18 小时前
JVM直接内存和堆内存比例如何设置?
java·jvm·笔记·学习·spring
siriuuus19 小时前
JVM 垃圾收集器相关知识总结
java·jvm
小满、21 小时前
什么是栈?深入理解 JVM 中的栈结构
java·jvm·1024程序员节
百花~1 天前
JVM(Java虚拟机)~
java·开发语言·jvm
每天进步一点点dlb1 天前
JVM中的垃圾回收算法和垃圾回收器
jvm·算法
漫漫不慢.2 天前
蓝桥杯-16955 岁月流转
java·jvm·蓝桥杯
boy快快长大3 天前
【JVM】线上JVM堆内存报警,占用超90%
jvm