Espace de noms [C++], paramètres par défaut et surcharge de fonctions


1. Espace de noms

Dans un projet à grande échelle, des conflits de nommage se produiront inévitablement dans des programmes écrits par différents membres. Dans ce cas, les espaces de noms peuvent être une bonne solution au problème des grands conflits de nommage. Ils peuvent être utilisés pour éviter les conflits de nom (nom) dans différentes bibliothèques ou modules.

Les noms peuvent être des variables, des fonctions, des classes, des structures, des énumérations, etc. De plus, les espaces de noms nous permettent de regrouper les noms dans différents espaces logiques, améliorant ainsi la lisibilité et la maintenabilité du code.

1. Définition de l'espace de noms

Un espace de noms est défini à l'aide du mot-clé namespace suivi du nom de l'espace de noms :

namespace namespace_name {
    
     
// 命名空间中的代码 
}

Pour appeler un nom dans un espace de noms, il doit être précédé du nom de l'espace de noms et de l'opérateur ::, comme suit :

namespace_name::name;

Nous pouvons également utiliser la directive using namespace pour omettre le nom de l'espace de noms, mais cela peut augmenter le risque de conflits.

Les espaces de noms peuvent être définis à plusieurs endroits différents ou 嵌套dans d'autres espaces de noms. Plusieurs espaces de noms portant le même nom sont autorisés dans le même projet, et le compilateur les combinera finalement dans le même espace de noms.

L'espace de noms est ouvert, ce qui signifie que nous pouvons à tout moment ajouter de nouveaux noms à l'espace de noms existant.

Un espace de noms définit une nouvelle portée et tout ce qui se trouve dans l'espace de noms est confiné à cet espace de noms.

2. Utilisation de l'espace de noms

Les espaces de noms sont utilisés de trois manières

  • Ajouter un nom d'espace de noms et un qualificateur de portée
namespace example {
    
     
	int a = 0;
	int b = 1;
	int Add(int left, int right)
	{
    
    
		return left + right;
	}
)

int main()
{
    
    
	printf("%d\n", example::a);
	return 0;
}
  • Utilisez using pour introduire un membre dans l'espace de noms
namespace example {
    
     
	int a = 0;
	int b = 1;
	int Add(int left, int right)
	{
    
    
		return left + right;
	}
)

using example::b;
int main()
{
    
    
	printf("%d\n", example::a);
	printf("%d\n", b);
	return 0;
}
  • Utilisez le nom d'espace de noms using namespace pour importer
namespace example {
    
     
	int a = 0;
	int b = 1;
	int Add(int left, int right)
	{
    
    
		return left + right;
	}
)

using namespace example;
int main()
{
    
    
	printf("%d\n", example::a);
	Add(10, 20);
	return 0;
}

2. Paramètres par défaut

J'ai l'impression que ce nom n'est pas bien choisi, et je ne comprends pas ce qu'on appelle un paramètre par défaut au sens littéral. L'anglais est plus facile à comprendre, argument par défaut , la traduction littérale estparamètres par défaut

En termes simples, cela fait référence à la spécification d'une valeur par défaut pour les paramètres de la fonction lorsque la fonction est déclarée ou définie. Lorsque la fonction est appelée, si aucun paramètre réel n'est spécifié, la valeur par défaut est utilisée ; sinon, le paramètre réel spécifié est utilisé.

1. Classement

  1. Tous les paramètres par défaut

Autrement dit, tous les paramètres de la fonction reçoivent une valeur par défaut.

void Func(int a = 10, int b = 20, int c = 30)
{
    
    
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	cout<<"c = "<<c<<endl;
}
  1. paramètre semi-par défaut

Il s'agit de donner à certains paramètres des valeurs par défaut
.

  1. Les paramètres semi-par défaut doivent être donnés séquentiellement de droite à gauche, et ne peuvent pas être donnés alternativement, et ne peuvent être omis que du dernier paramètre lors de l'appel
  2. Les paramètres par défaut ne peuvent pas apparaître dans la déclaration et la définition de la fonction en même temps, la déclaration est pour le paramètre par défaut et la définition n'est pas pour
void Func(int a, int b = 10, int c = 20)
{
    
    
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	cout<<"c = "<<c<<endl;
}

2. Autres précautions

  1. Les arguments par défaut doivent être des constantes ou des variables globales, et non des variables ou des expressions locales.
  2. Les paramètres par défaut ne peuvent pas modifier les règles de surcharge de la fonction, c'est-à-dire que les fonctions portant le même nom ne peuvent pas être distinguées en fonction du nombre de paramètres par défaut.

3. Surcharge de fonctions

Cas particulier des fonctions, le C++ permet de déclarer plusieurs fonctions portant le même nom dans une même portée Ces fonctions portant le même nom ont des listes de paramètres formels différentes ( numéro ou type de paramètre ou ordre des types ) qui sont souvent utilisées pour traiter le problème de l'implémentation de fonctions similaires avec des types de données différents.

// 1、参数类型不同
int Add(int left, int right)
{
    
    
	//...
}

double Add(double left, double right)
{
    
    
	//...
}

// 2、参数个数不同
void f()
{
    
    
	//...
}

void f(int a)
{
    
    
	//...
}

// 3、参数类型顺序不同
void f(int a, char b)
{
    
    
	//...
}

void f(char b, int a)
{
    
    
	//...
}

Si les noms de fonction et les paramètres de deux fonctions sont identiques, mais que les valeurs de retour sont différentes , cela ne constitue pas une surcharge.


Résumer

Ce qui précède peut être dit que C++ compense certaines des parties les moins utiles du langage C. La maîtrise de ces connaissances aidera l'apprentissage ultérieur de C++.

Je suppose que tu aimes

Origine blog.csdn.net/lyq2632750277/article/details/131793947
conseillé
Classement