A classes de relações compósitos
- Composto: é uma relação entre o tipo de meio que compreende outros tipos de objectos nos objectos de um determinado tipo de
- Composto (Composição) Há outros sinónimos, por exemplo, camadas (estratificação), de contenção (intrão), agregação (polimerização), a incorporação de que (encaixado)
- Por exemplo:
class Address {};
class PhoneNumber {};
//此类为复合类型
class Person
{
public:
//...
private:
std::string name;
Address address;
PhoneNumber voiceNumber;
PhoneNumber faxNumber;
};
Em segundo lugar, o complexo tem dois significados
- Na cláusula 32, que introduziu o "patrimônio público" na representa-a (a) sentido
- Complexo contém dois significados:
- ①has-A (a): geralmente utilizados no domínio de aplicação
- ②is implementou-in-termos-de (algo implementado ilustrando): normalmente usado para implementar domínio
Três, "tem-um" senso
- Representante tem-um: Existem outros tipos em um tipo
- Por exemplo, no código o início do artigo, a classe Pessoa tem um tipo de endereço, tipo PhoneNumber, por isso tem uma classe Pessoa tem-um senso de
Quatro "é implementada-in-termos-of" significado
- está implementada-in-terms- de ( de acordo com a perceber alguma coisa) é representativa de: para implementar algum tipo de outro tipo
- Por exemplo:
- C ++ set biblioteca STL e mapear recipientes, o fundo é estrutura de árvore vermelho-preto para alcançar, que é definido no mapa e ter uma sensação de "é implementada-in-termos-de", porque ele é implementado de acordo com a estrutura de árvore vermelho-preto em
- Outro exemplo é, C ++ recipiente pilha biblioteca STL e fila de espera, que pode ser interna do vetor, lista e outros recipientes para atingir, de modo que a pilha e tem a fila "é implementada-em-termos de-" significado
apresentação do caso
- Agora nós temos uma demanda:
- Nós não queremos usar o conjunto de contêineres STL fornecido, mas a sua própria definição de um conjunto de recipiente
- E, a fim de facilitar a realização, gostaríamos de usar o método em STL navio recipiente lista para alcançar Set
- Seguindo uma abordagem errada, as razões erradas são:
- elemento lista é repetível, enquanto os elementos do conjunto de elementos não será repetido
- Portanto, este sistema de herança em violação da relação é-um
//直接继承于std::list,在内部直接调用list的方法来实现Set
template<typename T>
class Set :public std::list<T>
{
//...
};
- Se você tomar o "é implementada-in-terms-de" abordagem, em seguida, a maneira correta é tomar a seguinte forma:
//“is-implemented-in-terms-of”手法
template<typename T>
class Set
{
public:
bool member(const T& item)const;
void insert(const T& item);
void remove(const T& item);
std::size_t size()const;
private:
std::list<T> rep; //底层以std::list实现
};
template<typename T>
bool Set<T>::member(const T& item)const
{
return std::find(rep.begin(), rep.end(), item);
}
template<typename T>
void Set<T>::insert(const T& item)
{
if (!member(item))
rep.push_back(item);
}
template<typename T>
void Set<T>::remove(const T& item)
{
//关于typename,参阅条款42
typename std::list<T>::iterator it
= std::find(rep.begin(), rep.end(), item);
if (it != rep.end())
rep.erase(it);
}
template<typename T>
std::size_t Set<T>::size()const
{
return rep.size();
}
- No código acima, todos nós terá que trabalhar Set parte inferior da std :: list para ser concluído, por isso é fácil de entender "é implementada-in-termos-of (de acordo para conseguir algo)" O que significa o
V. Resumo
- Complexo e público herança significado totalmente diferente
- No domínio de aplicação, o que significa que o composto tem-um (a). Em alcançar domínio, isso significa que o composto é implementado-in-termos-de (algo implementado de acordo com a)