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++

  1. #1
    Membre actif 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
    Points : 219
    Points
    219
    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 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    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
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 470
    Points : 6 107
    Points
    6 107
    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 actif 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
    Points : 219
    Points
    219
    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