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;  
}
相关推荐
阿龟在奔跑10 小时前
引用类型的局部变量线程安全问题分析——以多线程对方法局部变量List类型对象实例的add、remove操作为例
java·jvm·安全·list
王佑辉10 小时前
【jvm】方法区常用参数有哪些
jvm
王佑辉10 小时前
【jvm】HotSpot中方法区的演进
jvm
Domain-zhuo11 小时前
什么是JavaScript原型链?
开发语言·前端·javascript·jvm·ecmascript·原型模式
Theodore_10221 天前
7 设计模式原则之合成复用原则
java·开发语言·jvm·设计模式·java-ee·合成复用原则
我是苏苏1 天前
Web开发:ORM框架之使用Freesql的DbFrist封装常见功能
java·前端·jvm
天草二十六_简村人2 天前
Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化
java·jvm·数据库·mongodb·阿里云·微服务·云计算
老码沉思录2 天前
Android开发实战班 - 数据持久化 - Room 数据库应用
android·jvm·数据库
起名字真南2 天前
【C++】深入理解 C++ 中的继承进阶:多继承、菱形继承及其解决方案
java·jvm·c++·chatgpt·aigc
偶尔。5352 天前
JVM垃圾回收算法详解
jvm