Esta é a maneira correta de escrever uma série de ponteiros?

Idiota

Eu tenho uma classe "Funcionário" e quero criar uma série de ponteiros para isso.

Isso vai funcionar?

Employee *employeeArr[size];

No meu "for loop" algo assim

employeeArr[i] = new Employee(surname , firstname , gender); // constructor implemented Employee( para1, para2, para3)

OU devo escrever

Employee *employeeArr = new Employee[size];

E preencha tudo com "pontos" como

employeeArr[i].setSurname(surname);

Você pode explicar o motivo também, eu sou realmente novo em dicas. O segundo me foi contado por outra pessoa, mas não consegui obter uma resposta sobre por que não posso usar o primeiro. Além disso, se possível, não mencione std :: array ou std :: vector, ainda sou muito novo

user9212993

Desculpe por surpreendê-lo:
Nenhum dos exemplos que você deu deve ser considerado como a "maneira correta" de lidar com coleções de classes em c ++.

Além disso, se possível, não mencione std :: array ou std :: vector, ainda sou muito novo

Não, esse é o caminho errado puxando a égua. O uso apropriado de ponteiros brutos e matrizes brutas certamente está além de suas capacidades, se você não souber como lidar com eles std::arrayou std::vectorprincipalmente.


Suponha que sua Employeeclasse se pareça com

struct Employee {
    std::string surname_;
    std::string firstname_;
    enum Gender {
       Female = 'F' ,
       Male = 'M' ,
       Unxpecified = 'X'
    } gender_;
};

e você tem uma sobrecarga para o std::operator>>()

std::istream& operator>>(std::istream& is, Employee& employee) {
    char genderSymbol;
    is >> employee.surname_ >> employee.firstname_ >> genderSymbol;
    switch(genderSymbol) {
    case 'F':
    case 'M':
    case 'X':
         employee.gender_ = (Employee::Gender)genderSymbol;
         break;
    default:
        is.setstate(std::ios_base::failbit);
        break;
    }
}

Uma maneira boa e idiomática de representar essa Employeematriz seria usar um

std::vector<Employee> employeeArr;

e preencha em um loop:

Employee employee;
while(std::cin >> employee) {
    employeeArr.emplace_back(employee);
}

Se você realmente precisa de ponteiros (referências), pode considerar o uso de ponteiros inteligentes, conforme fornecido com as classes do utilitário Dynamic Memory Management .

Por exemplo, você pode decidir ter um

std::vector<std::unique_ptr<Employee>> employeeArr;

e inicializá-lo como

while(std::cin >> surname >> firstname >> gender) {
    employeeArr.emplace_back(std::make_unique<Employee>(surname , firstname , gender));
}

Isso é levado em consideração se você deseja gerenciar pools de instâncias de classe organizadas hierarquicamente, como:

struct Employee {
    virtual ~Employee() {}
    std::string surname_;
    std::string firstname_;
    enum Gender {
       Female = 'F' ,
       Male = 'M' ,
       Unxpecified = 'X'
    } gender_;
};

struct IForeman : Employee {
    virtual std::vector<const Employee const*> TeamMembers() const = 0;
    virtual void AddTeamMember(const Employee const* member) = 0;
};

class Foreman : public IForeman {
     str::vector<const Employee const*> teamMembers_;
public:
     std::vector<const Employee const*> TeamMembers() const {
         return teamMembers_;
     }
     void AddTeamMember(const Employee const* member) {
         teamMembers_.push_back(member);
     }
};

Considere distribuir ponteiros próprios ou compartilhados para conexões relacionadas usando constponteiros simples .

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Esta é uma maneira correta de usar AND, OR no mysql?

Esta é a maneira correta de iniciar uma atividade?

Esta é a maneira correta de escrever declarações IF em R?

Esta é a maneira correta de escrever uma transação com várias instruções com o Neo4j?

A maneira correta de escrever duas variáveis iguais uma à outra

Maneira melhor / correta de escrever uma consulta complexa

Esta é a maneira correta de passar uma classe Period através de um Parcelable

Esta é a maneira correta de encerrar uma goroutine em golang?

Esta é a maneira correta de gerar uma exceção? (Pitão)

Esta é a maneira correta de armazenar uma subcoleção?

Esta é a maneira correta de criar uma matriz em python

Esta é a maneira correta de reutilizar uma função JS?

Esta é a maneira correta de encerrar uma goroutine em golang?

esta é uma maneira correta de analisar um gráfico?

Esta é a maneira correta de proteger uma rota no React usando ganchos?

Existe uma maneira melhor de escrever esta função

Existe uma maneira melhor de escrever esta função recursiva?

Existe uma maneira mais limpa de escrever esta grade?

Existe uma maneira melhor de escrever esta função recursiva?

Qual é uma maneira limpa de escrever esta função?

Existe uma maneira mais eficiente de escrever esta tabuada?

Existe uma maneira melhor de escrever esta consulta selecionada

Existe uma maneira melhor de escrever esta função haskell?

Esta é a maneira certa de declarar ponteiros

LLVM malloc uma série de ponteiros

Maneira correta de escrever testes para React

Maneira correta de escrever a linha no arquivo?

Maneira correta de escrever um loop for aninhado?

Quantos ponteiros existem em uma série de ponteiros

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    UITextView não está exibindo texto longo

  3. 3

    Dependência circular de diálogo personalizado

  4. 4

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  5. 5

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  6. 6

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  7. 7

    Setas rotuladas horizontais apontando para uma linha vertical

  8. 8

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  9. 9

    Definir um clipe em uma trama nascida no mar

  10. 10

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  11. 11

    Como dinamizar um Dataframe do pandas em Python?

  12. 12

    regex para destacar novos caracteres de linha no início e no fim

  13. 13

    Why isn't my C# .Net Core Rest API route finding my method?

  14. 14

    Como obter a entrada de trás de diálogo em treeview pyqt5 python 3

  15. 15

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  16. 16

    How to create dynamic navigation menu select from database using Codeigniter?

  17. 17

    Como recuperar parâmetros de entrada usando C #?

  18. 18

    Changing long, lat values of Polygon coordinates in python

  19. 19

    Livros sobre criptografia do muito básico ao muito avançado

  20. 20

    Método \ "POST \" não permitido no framework Django rest com ações extras & ModelViewset

  21. 21

    Pesquisa classificada, conte números abaixo do valor desejado

quentelabel

Arquivo