IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ | 概念 | 命名空间 -> 正文阅读

[C++知识库]C++ | 概念 | 命名空间

命名空间的引入

??在C++中,名称可以是变量、函数、结构、枚举、类以及类和结构的成员。当随着项目的增大,名称相互冲突的可能性也将增加。使用多个厂商的类库时,可能导致名称冲突。

??例如,两个库可能都定义了名为List、Tree和Node的类,但定义的方式不兼容。用户可能希望使用一个库的List类,而使用另一个库的Tree类。这种冲突被称为名称空间问题。

命名空间的作用

??一个名称空间中的名称不会与另一个名称空间的相同名称发生冲突,同时允许程序的其他部分使用该命名空间中声明的东西。

??使用名称空间的主旨是简化大型编程项目的管理工作。

命名空间的使用

??使用namespace创建名称空间。

??using声明使特定的标识符可用,using编译指令使得整个命名空间可用。

??使用using声明比使用using编译指令更安全,一是当与局部名称冲突时,编译器会报错; 二是命名空间的名称可能分散在多个地方,这使得难以准确知道添加了哪些名称。

#include <iostream>
int main()
{
    using namespace std;
    //首先,#include语句将头文件iosteream放到名称空间std中,然后,using编译指令使该名称空间在main函数中可用。
}

命名空间解决同名函数例子

??两个函数具有相同的名字,但要输出不同的信息,就有必要使用到命名空间的概念。

源文件:dog.h

#ifndef __DOG_H__
#define __DOG_H__

namespace C{

class Dog{
private:
    char *name;
    int age;
public:
    void setName(char *name);
    int setAge(int age);
    void printInfo(void);
};

void printVersion(void);
}
#endif

源文件:dog.cpp

#include "dog.h"
#include <iostream>

using namespace std;

namespace C{
    void Dog::setName(char *name)
    {
        this->name = name;
    }

    int Dog::setAge(int age)
    {
        if (age < 0 || age > 20)
        {
            this->age = 0;
            return -1;
        }

        this->age = age;
        return 0;
    }

    void Dog::printInfo(void)
    {
        printf("name = %s, age = %d\n",name,age);
    }

    void printersion(void)
    {
        printf("Dog v1");
    }
}

源文件:person.h

#ifndef __PERSON_H__
#define __PERSON_H__

namespace A{

class Person{
private:
    char *name;
    int age;
    char *work;

public:
    void setName(char *name);
    int setAge(int age);
    void printInfo(void);
    };

    void printfVersion(void);
}
#endif

源文件:person.cpp

#include "person.h"
#include <iostream>

using namespace std;

namespace A {

void Person::setName(char *name)
{
    this->name = name;
}

int Person::setAge(int age)
{
    if (age < 0 || age > 150)
    {
        this->age = 0;
        return -1;
    }
    this->age = age;
    return 0;
}

void Person::printInfo(void)
{
    printf("name = %s, age = %d, work = %s\n", name, age, work); 
}

void printVersion(void)
{
    printf("Person v1\n");
}

}

源文件:main.cpp

#include "dog.h"
#Include "person.h"

int main(int argc, char **argv)
{
    A::Person per;
    per.setName("zhangsan");
    per.setAge(16);
    per.printInfo();

    C::Dog dog;
    dog.setName("wangcai");
    dog.setAge(1);
    dog.printInfo();

    A::printVersion();
    C::printVersion();
    return 0;
}

Makefile

main.exe : dog.o person.o main.o
	g++ dog.o person.o main.o -o main.exe
dog.o: dog.h dog.cpp
	g++ dog.cpp -o dog.o
person.o : person.h person.cpp
	g++ person.cpp -o person.o
main.o : dog.h person.h main.cpp
	g++ main.cpp -o main.o

RunCode.bat

make
md output
move *.o %cd%\output
move *.exe %cd%\output
cd %cd%\output
main.exe
pause

付出积极主动

??参考文章与书籍才整理出这么一篇文章,初步了解这个概念,做出的努力就是将其真正运行一次,毕竟编程语言的规则是在运行,了解和犯错中逐渐掌握的。然后就是将其记录下来,好记性不如烂笔头。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:12:41  更:2021-11-20 18:13:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:31:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码