Est-ce que le EG: P> C ++ code> C code> de procédures autorisées? Si je devais donner du code à quelqu'un d'autre, serait-il accepté comme c ++ code> juste parce qu'il a std :: vecteur code> et std :: string code > (au lieu de char * code>) à l'intérieur ou tout fort> doit être une classe? int number = 204;
std::string result = my_procedure(number);
OR
MyClass machine;
std::string result = machine.get(number);
6 Réponses :
C ++ permet une variété de styles de programmation, le code de procédure étant l'un d'entre eux. P>
Quel style à utiliser dépend du problème que vous essayez de résoudre. La marge entre C et C ++ est la compilation de votre code avec un compilateur C ++. P>
Je fais parfois utiliser des fonctions de procédure dans mon code. Parfois, il résout le problème. P>
C'est certainement acceptable d'avoir des fonctions libres dans votre code - il s'agit d'une architecture, pas de "++ ness". Pour les petits programmes, il n'a même pas de sens d'aller dans les classes, car OO est vraiment un outil pour gérer la complexité. Si la complexité n'est pas là pour commencer, pourquoi déranger? P>
Votre deuxième question, où est dessinée la ligne, n'a pas de réponse courte. L'évidence est que la ligne est dessinée dans tous les endroits où la norme C diffère de celle de C ++. Mais si vous recherchez une liste de fonctionnalités de langue de haut niveau que C ++ a et C ne le fait pas, voici certains d'entre eux: P>
nouveau code> / Supprimer code> pour gérer la mémoire li>
ul> C ++ Code peut toujours être valide Code C ++, même sans classes. Les classes sont plus une fonctionnalité et ne sont pas nécessaires dans chaque morceau de code. P>
C ++ est essentiellement C avec plus de fonctionnalités, il n'y a donc pas vraiment de "marge" entre les deux langues. P>
Si vous lisez la conception et l'évolution de Stroustrup, vous verrez que C ++ était destiné à prendre en charge plusieurs styles de programmation. Utilisez le problème que l'on est le plus approprié le problème (pas le même que celui que vous connaissez.) P>
Dans les applications du monde réel hérité, il y a souvent très peu de distinction. Certains code C ++ étaient à l'origine Code C NAD puis recompilé. Lentement, il migre pour utiliser des fonctionnalités C ++ pour améliorer sa qualité. P>
En bref, oui, le code C ++ peut être procédural. Mais vous trouverez qu'il diffère du code C si vous utilisez des fonctionnalités C ++, le cas échéant. P>
Quelle bonne pratique doit considérer des choses telles que l'encapsulation, la qualification et la compréhensibilité de l'API client. P>
C ++ est une langue multi-paradigme, où OO, procédurale, générique / générative et - à une moindre mesure (mais augmentant avec C ++ 0x) fonctionnelle - font partie des paradigmes. Vous devez utiliser ce qui est le meilleur ajustement pour le problème: vous voulez que le code soit facile à obtenir et à rester à droite, et difficile à fourrer. P>
L'utilité des classes est dans les données d'emballage (état) ainsi que les fonctions associées. Si votre fonction Par exemple, imaginez l'ajout d'un paramètre à la fonction pour spécifier si la sortie doit être «d'abord», «deuxième» au lieu de «un», «deux». Vous voulez que le comportement soit défini une fois et que vous vous êtes souvenu, mais ailleurs dans l'application, un autre code peut également utiliser la fonctionnalité, mais préfère l'autre paramètre. C'est une bonne idée d'utiliser un objet pour contenir l'état et de le disposer ainsi de la durée de vie et de l'accessibilité de chaque objet s'aligne sur le code qui l'utilisera. P>
EDIT: P>
Dans le contexte de cette question, où existe la marge entre C et C ++ (le cas échéant)? P>
blockQuote>
C ++ vous donne simplement un ensemble plus riche de façons de faire face à vos tâches de programmation, chacune avec leurs avantages et vos inconvénients nécessaires. Il y a beaucoup de fois où la meilleure façon est toujours la même chose que cela aurait été fait dans C. Il serait pervers pour un programmeur C ++ de choisir une manière pire simplement parce qu'elle n'était possible que dans C ++. Néanmoins, ces choix existent à des niveaux de myriades, il est donc courant d'avoir une fonction non [de classe-] membre qui prend un paramètre wordify code> n'est pas nécessaire de conserver un état entre les appels, il n'est pas nécessaire d'utiliser une classe / objet. Cela dit, si vous pouvez prédire que vous voudrez bientôt que vous auriez d'être d'état, il peut être utile de commencer par une classe afin que le code client n'a pas besoin de changer autant. P>
const std :: string & code>, combinant l'appel de la fonction procédurale avec orienté objet. données générées par un modèle code>: Tout fonctionne bien ensemble. p>
Bons exemples sur les deux derniers paragraphes.
#include <sstream>
#include <string>
#include <iostream>
using namespace std;
string wordify(int n)
{
stringstream ss;
ss << n; // put the integer into the stream
return ss.str(); // return the string
}
int main()
{
string s1 = wordify(42);
string s2 = wordify(45678);
string s3 = wordify(-99);
cout << s1 << ' ' << s2 << ' ' << s3 << '\n';
}
Ce n'est pas vraiment ce dont je parlais. En outre, je n'essayais pas d'implémenter itoa () code> mais entier à mots code>. par exemple. 142 code> -> cent quarante deux code>. pas b> 142 code> -> "142" code>. J'utilisais cet extrait de code comme exemple. En outre, bienvenue à. La prochaine fois, essayez de formater votre code avec le bouton {} code>.
C ++ offre plus que des objets. Beaucoup de code C ++ ont été écrits qui n'utilisent aucune classe du tout.
200-300 lignes de code juste pour la conversion int-à chaîne?
Notez que la question ne demande pas si c'est valide b> C ++, il demande s'il est bonne pratique b>. Faire simplement l'observation qu'il y a beaucoup de code C ++ écrit de cette façon ne répond pas à la question.
@myrkos, je ne me souviens pas de la longueur exacte. Le code est dans un ordinateur à 25 minutes.
@Muggen, je veux dire 200-300 Les lignes de code pour une tâche aussi simple sont un peu trop. Vous devriez regarder un didacticiel.
@myrkos, oui, je suppose que c'était moins que ça alors.
Jetez un coup d'œil à ceci: en.wikipedia.org/wiki/itoa
@myrkos, ah pas
itoa code>. entrée:142 code> retournera la chaînecent quarante deux code>. Tu vois ce que je veux dire ? Quelque chose comme entier aux mots.Oh je vois. Cela le rendrait plus longtemps. MDR.