Il existe en C++ 3 types de dépendance possible entre deux classes distinctes.
Représentation UML
Soit deux classes appelées A et B, liées entre elles par une relation de composition. On considère que la classe A englobe B. Si l'objet de la classe A est détruit alors celui de B est amenée à disparaître. Le contraire n'est pas possible.
Représentation UML
Soient les classes A et B nommées respectivement CEnsemble et CElement
CEnsemble.h
#include "CElement.h"
#ifndef _CEnsemble_
#define _CEnsemble_
class CEnsemble{
private :
CElement monElement; // un objet de type CElement est utilisé en tant qu'attribut de la classe CEnsemble
public :
CEnsemble(); //Constructeur
~CEnsemble(); //Destructeur
};
#endif
CEnsemble.cpp
#include "stdafx.h"
#include <iostream>
#include "CEnsemble.h"
using namespace std;
CEnsemble::CEnsemble(){
this -> monElement = CElement();
}
CEnsemble::~CEnsemble(){}
CElement.h
#ifndef _CElement_
#define _CElement_
class CElement{
private :
int var1;
int var2;
char hello;
public :
CElement();
~CElement();
void afficherVar();
};
#endif
CElement.cpp
#include "stdafx.h"
#include <iostream>
#include "CElement.h"
#include "CEnsemble.h"
using namespace std;
CElement::CElement(){}
void CElement::afficherVar(){}
CElement::~CElement(){}
main.cpp
#include "stdafx.h"
#include <iostream>
#include "CElement.h"
#include "CEnsemble.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CEnsemble unEnsemble = CEnsemble();
return 0;
}
Deux classes A et B sont reliées par une agrégation, si l'objet A disparaît, l'objet B peut subsister, l'inverse est possible.
Représentation UML
Soit les classes A et B nommées respectivement CEnsemble et CElement
CEnsemble.h
#include "CElement.h"
#ifndef __CEnsemble__
#define __CEnsemble__
class CEnsemble{
private: CElement *monElement;
public: CEnsemble(CElement *pElement);
};
#endif
CEnsemble.cpp
#include "stdafx.h"
#include <iostream>
#include "CEnsemble.h"
#include "CElement.h"
using namespace std;
CEnsemble::CEnsemble(CElement *pElement){
this -> monElement = pElement;
}
CElement.h
#ifndef __CElement__
#define __CElement__
class CElement{
private:
public:
CElement();
};
#endif
CElement.cpp
#include "stdafx.h"
#include <iostream>
#include "CElement.h"
#include "CEnsemble.h"
using namespace std;
CElement::CElement(){}
main.cpp
#include "stdafx.h"
#include <iostream>
#include "CEnsemble.h"
#include "CElement.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CElement unElement = CElement();
CEnsemble unEnsemble = CEnsemble(&unElement);
return 0;
}