2010-02-12 6 views
1

J'ai deux questions fondamentales. Le premier concerne la fonction dans d'autres classes. Si j'ai un fichier d'en-tête avec une classe et je veux utiliser cette fonction dans une autre classe, je l'ai créé, je dois toujours de construire un objet de classe pour exécuter une fonction dans cette classe comme:Quelques questions sur les classes C++

someclass class; <----object construction 
class.somefunction(); 

Y at-il un moyen juste d'appeler la fonction avec la construction de l'objet?

Et la deuxième question est-il correct de mettre plusieurs petites classes dans un fichier d'en-tête?

+0

Je présume que vous voulez dire _without_ la construction de l'objet? –

Répondre

3

Les fonctions ne doivent être des fonctions membres que si elles agissent sur un objet de la classe. Les fonctions qui n'agissent pas sur un objet doit être juste des fonctions globales simples (ou classe statique):

// Global function 
void foo() { /* do something */ } 

// Static function 
class Foo 
{ 
public: 
    static void foo() { /* do something */ } 
}; 

Pour votre deuxième question, oui, il est ok. En général, les gens s'en tiennent à une classe par fichier, mais à mon avis, il n'y a rien de mal à avoir quelques petites classes dans un seul fichier.

+0

Vous (ou quelqu'un d'où vous apprenez) peut provenir d'un environnement Java, où toutes les fonctions doivent aller dans une classe.En C++ il n'y a pas de telle restriction, donc vous devriez vous sentir complètement libre d'écrire des fonctions qui sont en dehors d'une classe, si cela a plus de sens. – MatrixFrog

+0

Je pense que vous vouliez commenter l'article de la question. –

3

Si votre fonction est déclarée static, vous n'avez pas besoin d'une instance d'objet pour l'appeler.

class Foo 
{ 
    public: 
     static void Bar() {} 
}; 

// ...later 
Foo::Bar(); 

Pour répondre à votre deuxième question, oui, c'est parfois correct. Je l'ai déjà fait avec de petites structures d'utilité qui sont liées les unes aux autres. Habituellement, je suis juste paresseux et je ne veux pas prendre la peine de faire des fichiers séparés. Y at-il un moyen d'appeler la fonction avec la construction de l'objet?

0

Seulement si la fonction est déclarée statique. (Ok, c'est un mensonge, son possible sans constucting un objet si vous subvertir le système de type, mais ce n'est pas une bonne idée)

Et la deuxième question est-il correct de mettre plusieurs petites classes dans un en-tête fichier?

Bien sûr, c'est fait tout le temps.

0

1 statique comme déjà mentionné

2 faire ce qui semble naturel. Gardez les classes liées ensemble. L'un des problèmes du langage Java est son application fanatique d'une classe par fichier

Cependant - le péché impardonnable se répand la mise en œuvre d'une classe dans toutes les implémentations des classes bc et d

Ie tout d'une mise en œuvre de la classe devrait être dans un fichier .cpp.

0
  1. delcare la fonction comme statique.
  2. Parlez-vous des classes internes? Si c'est le cas, alors c'est totalement légitime.