[Entrée C++ à la maîtrise] Espace de noms d'entrée C++

avant-propos

        Nous avons appris le langage C plus tôt et connaissons la grammaire de base et l'utilisation du langage C. Dans la prochaine période de temps, nous viendrons apprendre un nouveau langage basé sur le langage C et modifié selon le langage C—C++ 

        Shuo Shuo pense que tant que vous suivez mon blog, vous gagnerez certainement beaucoup. En dehors de toute autre chose, nous allons conduire, rester assis et tenir le coup

Histoire du C++

        Shuo Shuo croit qu'avant d'apprendre un nouveau sujet, il faut d'abord connaître ou comprendre l'histoire de ce sujet, comme le dit le dicton, "Connais-toi toi-même et connais l'ennemi, et tu ne perdras jamais cent batailles." Tout d'abord, comprenons ce qu'est C++.C++ est un langage de programmation informatique très largement utilisé. Il s'agit d'un langage de programmation à usage général qui prend en charge plusieurs modèles de programmation, tels que la programmation procédurale, l'abstraction de données, la programmation orientée objet, la programmation générique et les modèles de conception.

        Le langage C++ est développé à partir du langage C. Le langage C++ a été inventé sur la base du langage C au début des années 1980 par le Dr Bjarne Stroustrup des laboratoires Bell aux États-Unis et ses collègues .

Trois sauts dans le développement de C++

        ⭕La première étape : La première étape s'est déroulée du début des années 1980 à 1995. A ce stade, C++ est fondamentalement un langage orienté objet traditionnel, et avec l'efficacité proche du langage C, il occupe une part considérable dans les langages de développement utilisés dans l'industrie ;

        ⭕La deuxième étape : La deuxième étape va de 1995 à 2000. À cette étape, en raison de l'émergence de la bibliothèque de modèles standard (STL) et plus tard de Boost et d'autres bibliothèques, la programmation générique occupe une proportion croissante en C++. Bien sûr, dans le même temps, du fait de l'émergence de Java, C# et d'autres langages et de la baisse à grande échelle des prix du matériel, le C++ a été impacté dans une certaine mesure ;

        ⭕La troisième étape : de 2000 à nos jours, en raison de l'émergence de la programmation générative et de la métaprogrammation de modèles représentée par des bibliothèques telles que Loki et MPL (Boost), C++ a atteint un nouveau sommet dans l'histoire du développement. L'émergence des nouvelles technologies et l'intégration avec des technologies originales ont fait de C++ le membre le plus complexe des langages de programmation courants d'aujourd'hui.

Espaces de noms

        En C++, il existe un grand nombre de variables, de fonctions et de classes à apprendre ultérieurement. Les noms de ces variables, fonctions et classes existeront tous dans la portée globale, ce qui peut entraîner de nombreux conflits. Le but de l'utilisation de l'espace de noms est de localiser le nom de l'identifiant pour éviter les conflits de nommage ou la pollution de nom.L'apparition du mot-clé namespace vise ce genre de problème.

#include <stdio.h>
#include <stdlib.h>

int rand = 10;

// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
    printf("%d\n", rand);
    return 0;
}

// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”

Définition de l'espace de noms

        Pour définir un espace de noms, vous devez utiliser le mot-clé namespace, suivi du nom de l'espace de noms, puis d'une paire de {}, qui sont membres de l'espace de noms.

//定义一个名字为A的命名空间(变量、函数)
namespace A 
{
    int a = 100;
}
namespace B 
{
    int a = 200;
}
void test02()
{
    //A::a  a是属于A中
    cout<<"A中a = "<<A::a<<endl;//100
    cout<<"B中a = "<<B::a<<endl;//200
}

Les espaces de noms ne peuvent être définis que globalement

     Ce qui suit est la mauvaise façon d'écrire (l'espace de noms de définition locale est erroné)

int main()
{
    namespace A  //局部定义命名空间是错误的
    {
        int a = 1;
    }
    namespace B
    {
        int a = 2;
    }
    count << "A::a : " << A::a << endl;
    count << "B::a : " << B::a << endl;
    return 0;
}

Les espaces de noms peuvent être définis imbriqués

namespace A 
{
    int a = 1000;
    namespace B 
    {
        int a = 2000;
    }
}
void test03()
{
    cout<<"A中的a = "<<A::a<<endl; //1000
    cout<<"B中的a = "<<A::B::a<<endl; //2000
}

Plusieurs espaces de noms portant le même nom sont autorisés et le compilateur les synthétisera finalement dans le même espace de noms

namespace A 
{
    int a = 100;
    int b = 200;
}

namespace A 
{
    int c = 300;
}
void test04()
{
    cout<<"A中a = "<<A::a<<endl;//100
    cout<<"A中c = "<<A::c<<endl;//200
}

Les types de variables pouvant être stockés dans l'espace de noms

        En C++, les espaces de noms peuvent stocker différents types de variables, y compris, mais sans s'y limiter, les types suivants

1. Variables de type de données de base, telles que entier (int), virgule flottante (float), caractère (char), etc. 2.
Structure auto-définie (struct) ou objet de classe (class)
3. Variable de type énumération ( enum) .
4. Les variables de type pointeur peuvent pointer vers différents types de données
5. Les variables de type tableau peuvent être des tableaux unidimensionnels ou multidimensionnels.
6. Type de pointeur de fonction, un pointeur vers une fonction spécifique.
7. Alias ​​de type (typedef) ou définition de type (using).

 Les fonctions d'un espace de noms peuvent être définies en dehors de "l'espace de noms"

namespace A 
{
    int a=100;//变量
 
    void func();
}
 
void A::func()//成员函数 在外部定义的时候 记得加作用域
{
    //访问命名空间的数据不用加作用域
    cout<<"func-a = "<<a<<endl;
}
 
void funb()//普通函数
{
    cout<<"funb-a = "<<A::a<<endl;
}
void test06()
{
   A::func();
    funb();
}

espace de noms sans nom

        Cela signifie que l'identifiant dans l'espace de noms n'est accessible que dans ce fichier, ce qui équivaut à ajouter static à l'identifiant afin qu'il puisse être utilisé comme connexion interne

namespace
{
    int a = 10;
    void func()
    {
        cout<<"hello namespace"<<endl;
    }
}
void test()
{
 
    //只能在当前源文件直接访问a 或 func
    cout<<"a = "<<a<<endl;
    func();
}

Utilisation des espaces de noms

Utilisez using pour introduire un membre dans l'espace de noms

namespace N
{
    // 命名空间中可以定义变量/函数/类型
    int a = 0;
    int b = 1;
    int Add(int left, int right)
    {
        return left + right;
    }
    struct Node
    {
        struct Node* next;
        int val;
    };
}
using N::b;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);
    return 0;
}

Utilisez le nom d'espace de noms using namespace pour importer
 

namespace N
{
    // 命名空间中可以定义变量/函数/类型
    int a = 0;
    int b = 1;
    int Add(int left, int right)
    {
        return left + right;
    }
    struct Node
    {
        struct Node* next;
        int val;
    };
}

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

Résumer

        Après avoir appris cela, je pense que tout le monde a une compréhension préliminaire de l'espace de noms C++ comme moi. Si vous êtes intéressé par l'article du blogueur, vous pouvez y prêter attention trois fois. Je mettrai à jour le contenu de C++ plus tard. travaillons dur ensemble ! ! !

Guess you like

Origin blog.csdn.net/m0_75215937/article/details/131881998