IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

surcharge des opérateurs "{ }"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut surcharge des opérateurs "{ }"
    Bonjour à tous,

    N'ayant jamais vu de surcharge des opérateurs "accolades" { et } , j'imagine qu'il n'est pas possible de surcharger ces derniers. Cependant, l'affectation d'un tableau (ainsi que d'un vecteur), il est possible d'utiliser ces accolades pour renseigner les valeurs de ces derniers.

    Réalisant actuellement une classe "matrice", cela me simplifierais la vie de pouvoir utiliser ces fameuses accolades... Vous aurez compris que ce n'est pas tant l'utilisation des accolades en elles même qui m'intéresse, mais une affectation multiple.

    Pour le moment, chaque élément de ma matrice est initialisé indépendamment via operator () mais j'aimerais pouvoir faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     matrice(){1,2,8}{1,4,12};
    ou un équivalent pour initialiser une matrice 2*3.

    Est-ce possible ?

    Merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    L'accolade n'est pas un opérateur. Ces accolades représentent l'initializer-list.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 513
    Par défaut
    Bonjour,

    Voici un bout de code qui répond au besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <cassert>
    #include <initializer_list>
    #include <iostream>
    #include <vector>
     
    class Matrice {
    public:
    	explicit Matrice(std::initializer_list<std::vector<int>> lignes) :
    		m_nbLignes{lignes.size()},
    		m_nbColonnes{0}
    	{
    		if(m_nbLignes > 0)
    			m_nbColonnes = lignes.begin()->size();
    		for(auto const& ligne : lignes) {
    			assert(ligne.size() == m_nbColonnes);
    			for(auto const& element : ligne)
    				m_elementsLigneParLigne.push_back(element);
    		}
    	}
    	void print(std::ostream& os) const {
    		for(size_t lig = 0; lig < m_nbLignes; ++lig) {
    			for(size_t col = 0; col < m_nbColonnes; ++col)
    				os << m_elementsLigneParLigne[col*m_nbLignes + lig] << ' ';
    			os << '\n';
    		}
    	}
    private:
    	size_t           m_nbLignes;
    	size_t           m_nbColonnes;
    	std::vector<int> m_elementsLigneParLigne;
    };
     
    int main() {
    	auto const mat = Matrice{ {1, 2, 3}, {4, 5, 6} };
    	mat.print(std::cout);
    	return 0;
    }

  4. #4
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut
    Super,

    Merci à vous deux ! Je vais étudier ça de plus près.



    Sujet résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. surcharge des opérateurs
    Par Arson dans le forum C++
    Réponses: 9
    Dernier message: 30/05/2008, 11h40
  2. Réponses: 2
    Dernier message: 11/01/2008, 10h40
  3. Réponses: 7
    Dernier message: 02/12/2007, 21h43
  4. Surcharge des opérateurs ?
    Par kedare dans le forum Ruby
    Réponses: 3
    Dernier message: 06/11/2006, 23h47
  5. Variables polyvalentes et surcharge des opérateurs
    Par Antoine_935 dans le forum C++
    Réponses: 14
    Dernier message: 08/09/2006, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo