Résumé de la phase d'apprentissage C ++ (1)

Certains hors sujet

        Apprendre de nouvelles choses devrait encore se résumer à temps, sinon elles seront bientôt oubliées. Et dans le processus de résumé, nous allons trier notre propre langue et notre propre pensée, et également améliorer nos compétences d'expression personnelle. S'en tenir à des choses simples n'est pas facile, allez fille ~

        J'ai commencé à apprendre le C ++ en juillet. À cette époque, j'ai participé à un concours lié au traitement d'image numérique et à l'apprentissage automatique. Beaucoup d'excellents codes ont été écrits en C ++, mais je ne pouvais pas le comprendre et il n'y avait aucun moyen de l'améliorer. Le résultat du match a été terrible. Je suis donc déterminé à apprendre ce langage de programmation magique et efficace ~ D'un autre côté, je me prépare également pour la recherche d'emploi. Après tout, la programmation orientée objet est une excellente technique de programmation. Apprenez systématiquement. En pensant, à l'avenir, il peut également être utilisé consciemment pour résoudre des problèmes pratiques dans d'autres langages de programmation (tels que MATLAB, Python).

        J'ai fini de lire Larry Ullman, le "Livre C ++ pour tout le monde" d'Andreas Signer, et une partie du "C ++" de Guan Hao et An Zhiyong n'est plus difficile à apprendre. En regardant les titres de ces deux livres, vous savez qu'il s'agit d'une lecture d'introduction adaptée aux personnes sans fondement. Mais commencer est vraiment important! ! ! Au début, vous n'avez pas besoin de vous soucier de certains détails, mais vous devez vous concentrer sur la compréhension des idées de programmation. Bien sûr, la capacité pratique de base est toujours nécessaire, alors ne soyez pas paresseux, la capacité de programmation est pratiquée ~  

        Ce qui suit est un résumé des nouvelles choses apprises pour référence future.

Texte

        

1 Préparation

      Dans le processus de programmation, nous pouvons rencontrer de nombreux problèmes. Lorsque nous ne sommes pas en mesure de les résoudre, nous pensons souvent à nous tourner vers certains moteurs de recherche ou forums techniques. Comment poser des questions efficacement est également un art. Voir «Comment poser des questions de manière intelligente» (http://catb.org/~esr/faqs/smart-questions.html) écrit par Eric Steven Raymond pour plus de détails.

       L'écriture d'un programme en C ++ nécessite généralement plusieurs étapes: effacer le but et les besoins de ce programme-> programmation-> compiler, lier-> (déboguer, déboguer, déboguer ...) -> compiler, lier-> exécuter . Choisir un IDE qui convient à votre propre environnement de développement intégré peut grandement améliorer l'efficacité de la programmation.J'utilise Dev-C ++.



2 Type de données, syntaxe de base, structure de contrôle

         Les types de données courants sont les entiers, les nombres réels, les tableaux, les caractères, les chaînes, les pointeurs, les structures et les unions;


        C ++ a des exigences de grammaire plus strictes pour le programme. Manquer un petit point-virgule et une asymétrie entre parenthèses signalera des erreurs, vous devez donc développer de bonnes habitudes de programmation et essayer d'éviter de faire des erreurs de bas niveau;

        Assurez-vous de déclarer ou de définir avant d'utiliser des variables et des fonctions;

        Le type et la portée des variables doivent être soigneusement pris en compte, et le code doit être optimisé autant que possible sous réserve de remplir des fonctions de base;

        

       La structure de contrôle comprend conditionnelle if (-else), opérateur ternaire (? :), conditions multiples (switch), loop (while, for);


  

3 entrées, sorties et fichiers

        L'essence de chaque programme est de traiter les données, et beaucoup de données nécessitent une entrée par l'utilisateur ou la lecture d'un fichier. Après le traitement, le résultat doit être affiché et il doit être sorti sur l'interface interactive ou enregistré en tant que fichier.

        Assurez-vous de vérifier la légalité des données d'entrée; lorsque vous devez saisir les données plusieurs fois, n'oubliez pas de supprimer le résidu du tampon;

        Lors de la lecture et de l'écriture de fichiers, assurez-vous de vérifier si le fichier est réellement ouvert;



4 définir les fonctions personnelles

        Créer une fonction avec des paramètres d'entrée Les valeurs transmises à la fonction doivent avoir le type et l'ordre corrects: lors de la définition de la fonction, tous les paramètres obligatoires doivent être placés avant les paramètres optionnels;

        La fonction inline n'a pas besoin de lui définir de prototype, la fonction entière est définie avant la fonction principale;

        La surcharge d'une fonction consiste à définir une fonction avec différents paramètres (qui peuvent être de différents types de données ou avec un nombre différent de paramètres) avec le même nom, mais avec le même objectif;

        Il existe plusieurs types d'appels de fonction: transfert par valeur, transfert par adresse et transfert par référence;


5 objets et classes

     (Routine 1

#include 
#include 
//基类 
class Pet{
public:
	Pet(std::string theName);
	~Pet();
	virtual void eat();
	virtual void sleep();
	virtual void play()=0;//虚方法 //=0抽象方法   如果一个类中有一个抽象方法,那么必须至少还有一个普通的虚方法 
	static int getCount(); //静态方法 
	//void setName(std::string theName);
protected://允许这个类和他的子类来访问以下属性和方法 
	std::string name;
	friend class PetRenamer;//友元关系声明 (应该在没有其他办法时才使用友元关系,友元关系太多往往表示设计方案有缺陷)
private:
    static int count; //静态属性 
};
Pet::Pet(std::string theName){
	name=theName;
	count++;
	std::cout<<"Creating a pet named '"<name;
	std::cout<<" to "<name=newName;
	
}

//子类1 
//继承时的保留字public、protected、private与类的声明中含义不同 
class Cat:public Pet{
public:
	Cat(std::string theName);
	void climb();
	void play();
};
//继承机制中的构造器 
Cat::Cat(std::string theName):Pet(theName){
}
void Cat::climb(){
	std::cout<sleep();
	cat->eat();
	cat->play();
	std::cout<<"\n";
	dog->sleep();
	dog->eat();
	dog->play();
	
	delete cat;
	delete dog;
	return 0;
}

       Élémentaire

       La programmation d'objets est au cœur de C ++. Nous pouvons comprendre l'objet comme un nouveau type de données, la différence est qu'il comprend non seulement des variables (attributs) mais aussi des fonctions (méthodes).

       Dans la déclaration de la classe, généralement l'un des trois mots réservés public, protected, private doit être ajouté devant les attributs et les méthodes pour contrôler son accessibilité;

       Les méthodes peuvent s'appeler;

       Les constructeurs et les destructeurs sont un type particulier de méthode;

       ce pointeur

       Intermédiaire

       Mécanisme d'héritage de classe : ce mécanisme permet aux programmeurs de créer une hiérarchie de classes, et chaque sous-classe héritera des méthodes et des propriétés définies dans sa classe de base. En d'autres termes, le code de confiance existant peut être étendu via le mécanisme d'héritage, améliorant considérablement l'efficacité du développement.

       Faites attention à la syntaxe du constructeur et du destructeur utilisé dans le mécanisme d'héritage;

        Dans certains cas, la méthode override doit fournir une fonction générale dans la classe de base, mais elle doit changer l'implémentation de cette méthode dans sa sous-classe;

       La méthode de surcharge  est la même que la surcharge de fonction;

       Amitié   Une classe complètement hors de propos doit accéder à un membre protégé ou à un membre privé; l'ami de la classe est sélectionné par lui-même, ce qui est indiqué dans la déclaration de classe; ne pas abuser de la relation d'ami

       Avancé

       Les propriétés statiques et les méthodes statiques     n'appartiennent pas à un seul objet mais appartiennent aux propriétés et méthodes de la classe entière. Avantages: vous pouvez toujours contrôler leurs droits d'accès par le biais de mots réservés; vous pouvez accéder au membre sans créer d'objets; créer certaines données dans Partagé entre tous les objets de cette classe; vous ne pouvez pas accéder aux propriétés non statiques dans les méthodes statiques; n'oubliez pas d'allouer de la mémoire pour les propriétés statiques (c'est-à-dire de faire des déclarations de propriétés statiques en dehors de la déclaration de classe);

       Une méthode virtuelle    surcharge une méthode dans une sous-classe, mais lorsqu'un objet de sous-classe est généré par la nouvelle méthode, un pointeur vers la classe de base est utilisé. Lorsque la méthode est appelée à nouveau, c'est toujours une méthode de la classe de base qui est appelée. Sachez que déclarer toutes les méthodes en tant que méthodes virtuelles dans la classe de base ralentira le code exécutable final, mais peut garantir que le programme se comporte comme prévu. Lors de l'implémentation d'une relation d'héritage de classe à plusieurs niveaux, la classe de base la plus élevée ne doit avoir que des méthodes virtuelles.

       Les méthodes abstraites  indiquent au compilateur que cette méthode est indispensable, mais je ne peux pas lui fournir d'implémentation maintenant (dans cette classe de base); pour utiliser des méthodes abstraites, vous devez l'implémenter dans la classe de base; il y a un détail supplémentaire à noter: si Pour utiliser des méthodes abstraites dans une classe, elle doit avoir au moins une méthode virtuelle ordinaire;

         Fonctions polymorphes pouvant gérer de nombreux types de données différents

       Le  but de l' opérateur surchargé est de rendre le code plus facile à lire et à comprendre, essayez de ne pas perdre sa signification d'origine, déclaré avant la fonction principale, implémenté après la fonction principale;

       Plus d'    une sous-classe hérite de deux ou plusieurs classes de base;  

       L'héritage virtuel    indique au compilateur que les sous-classes dérivées de la classe actuelle ne peuvent avoir qu'une seule instance de cette classe de base


6 Gestion dynamique de la mémoire

        La mémoire dynamique permet aux programmeurs de créer et d'utiliser diverses structures de données qui peuvent être développées ou contractées en fonction de besoins spécifiques; une autre utilisation consiste à renvoyer un pointeur vers un bloc de mémoire (fonction d'usine);

        La mémoire dynamique se compose de blocs de mémoire avec uniquement des adresses et aucun nom, vous devez donc utiliser des pointeurs pour y accéder. Bien que les blocs de mémoire alloués dynamiquement n'aient pas de portée, les variables de pointeur utilisées pour stocker leurs adresses ont une portée.

        Application et libération de la mémoire dynamique; l'instruction delete ne libère que le bloc de mémoire pointé par le pointeur, mais le pointeur est toujours là;

        N'oubliez pas de déclarer des méthodes en tant que méthodes virtuelles lors de la création et de l'utilisation dynamiques d'objets;

        Constructeur de copie et opérateur d'affectation Occasions d'application -> Deux objets sont copiés, mais ils contiennent des membres de type pointeur. La copie bit par bit entraînera un danger caché du pointeur. Tant que vous déclarez une classe qui possède un attribut de pointeur et libère cette mémoire dans le destructeur, vous devez implémenter un constructeur de copie et un opérateur d'affectation; vous devez vous assurer que le constructeur de copie copie tous les attributs. La contrainte d'objet statique / la contrainte d'objet dynamique est préférable de toujours utiliser l'opérateur dynamic_cast lors du traitement des objets, n'oubliez pas de vérifier si le résultat est NULL avant de continuer  


7 Espaces de noms et modularité

        Les fichiers d'en-tête sont divisés en fichiers d'en-tête système et fichiers d'en-tête personnalisés pour enregistrer les déclarations de fonctions, les types de données définis par l'utilisateur (structures et classes), les modèles et les constantes globales; n'incluez que le code le plus nécessaire; essayez d'éviter de les utiliser lors de l'importation Chemin absolu, car cela réduira la portabilité du code;

        Fichiers d'implémentation Pour les utilisateurs, consultez les fichiers d'en-tête pour comprendre l'utilisation de base des fonctions, etc. Pour le compilateur, il doit être effacé jusqu'à la façon dont chaque fonction ou classe est implémentée; le nom du fichier d'implémentation doit être cohérent avec le fichier d'en-tête;

        Le préprocesseur C est un outil créé par des personnes pour développer des applications C et accélérer leur exécution.

        L'espace de noms est défini par l'utilisateur lui-même. Les éléments du même espace de noms peuvent être uniques dans cet espace de noms; vous pouvez utiliser le mot clé namespace pour ajouter de nouvelles choses à un espace de noms dans le même fichier ou dans un autre fichier; utilisez Espace de noms using chose (n'écrivez rien, n'écrivez pas simplement le nom de l'espace de noms, bien que ce ne soit pas impossible), l'emplacement de la directive ou de la déclaration using détermine dans quelle portée les choses extraites de l'espace de noms peuvent être utilisées;

        Les trois concepts de lien, de portée et de classe de stockage sont interdépendants, mais l'angle d'observation et la description du problème sont différents ~ Lorsque plusieurs fichiers sont compilés en même temps, chaque fichier est appelé unité de traduction et dans chaque unité de traduction Si et comment les choses définies sont utilisées dans une autre unité de traduction, c'est là que le lien entre en jeu; il est divisé en liens externes (chaque unité de traduction est accessible tant que la variable existe), liens internes (dans une unité de traduction Les choses définies ne peuvent être utilisées que dans l'unité de traduction) et pas de connexion (les variables définies dans la fonction n'existent qu'à l'intérieur de la fonction). Chaque variable a une classe de stockage, qui détermine où et comment le programme stockera la valeur de la variable sur l'ordinateur, et quelle portée la variable devrait avoir.


8 modèles

         Paradigme de programmation C ++: paradigme procédural (diviser le programme en différentes fonctions), paradigme orienté objet (organiser le code et les données en différentes classes et établir des relations d'héritage entre les classes), programmation générique (Aidez les programmeurs à créer des modèles de fonctions et de classes, plutôt que des fonctions et des classes spécifiques, vous pouvez résoudre plusieurs problèmes avec une seule solution ~)

         Écrivez et utilisez votre propre modèle de fonction de code générique (ne divisez pas le modèle de fonction en prototype et implémentation); modèle de classe (comme ci-dessus); utilisez la notation en ligne pour éviter que le compilateur ne trouve l'implémentation et rend le programme lisible Supérieur

         Bibliothèque de modèles standard STL

         Les conteneurs et les conteneurs d'algorithmes sont des structures numériques qui peuvent contenir deux valeurs ou plus. Différents problèmes conviennent à différents conteneurs. Vous pouvez écrire les vôtres ou appeler la bibliothèque de modèles standard C ++ (STL). Il existe de nombreux modèles soigneusement conçus et testés. Conteneurs prêts à l'emploi; la recherche du conteneur le plus approprié n'est qu'une partie du travail de programmation, et certaines fonctions (algorithmes) sont nécessaires pour traiter les données dans ce conteneur. STL fournit également de nombreux algorithmes bien conçus et rigoureusement testés pour résoudre divers problèmes courants. Problème. Les détails des algorithmes couramment utilisés en STL sont disponibles en ligne.




          Ce qui précède est l'essentiel du contenu du premier ouvrage de référence. Après avoir maîtrisé ces concepts de base, vous pouvez écrire des applications C ++ simples. Mais de nombreux détails ne sont pas visibles avant de le faire vous-même, vous devez encore en faire plus ~

       

Publié neuf articles originaux · a gagné les éloges 1 · views 6066

Je suppose que tu aimes

Origine blog.csdn.net/wcysghww/article/details/77966136
conseillé
Classement