栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021-11-03

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-11-03

C++头文件动态库函数封装

1.c++文件后缀
cpp .h hpp, cc , cxx
2.c++编译
g++ hello.cpp -o hello
3.c++头文件
一般没有.h,基本上是将c语言的头文件前面加一个c例如
#include
#include

4.c++如何调用c库(重点)
extern “C”
{
#include
#include
#include “myhead.h”
}

**例子:**
    1.将c生成动态库
  gcc add.c -fPIC -shared -o libadd.so
    2.将c函数声明添加到头文件 myhead.h
    3.再main.cpp使用c语言头文件
    extern "C"
    {
        #include 
        #include 
        #include "myhead.h"
    }
    4.编译程序
        g++ main.c libadd.so -o main
练习 : 自己编译c动态库,c++调用

//---------------------------------------
5.命名空间 作用域运算符::
因为c++库接口是非常丰富的,如果自己命名的函数或者全局变量与库中的函数冲突了
这样编译器就会不知道调用哪个函数,所以为了解决此问题,c++引入了命名空间这个概念

1.命名空间定义
    namespace 空间名
    {
        处了main函数外的所有函数,变量类型
    }
    注意命名空间空间一般放在头文件或者全局区域
dmeo:
    // 创建命名空间
    namespace class01
    {
        char name[100] = "jack";
        int age = 18;
    }
//----------------------------------
命名空间成员引用
    1.直接通过命名空间::成员(建议使用)
        class01::name
    
    2.using指示符引用成员
        using namespace class01;
        demo 
        // using 将class01暴露在此文件中
        // 相当于name在此文件任意位置随意使用,命名空间不起效果
        // 千万不要在头文件暴露命名空间,否则会导致空间污染
        using namespace class01;
        printf("name = %sn",name);
    
    3.using指定暴露空间中的哪个成员
        // 将空间里面的age进行暴露在本文件
        using class01::age;     
        printf("age = %dn",age); 
//-----------------------------------
2.命名空间嵌套
    namespace AAA
    {
        namespace BBB
        {
            int number = 10;
        }
        int data = 20;
    }
    namespace AAA
    {
        int number = 30;
    }
    使用方式:
    1.直接使用
        printf("%dn",AAA::BBB::number);
        printf("%dn",AAA::data);
        printf("%dn",AAA::number);
    
    2.using 指引使用
        using namespace AAA::BBB;
        printf("%dn",number);

    3.using 指定成员引用    
        using namespace AAA::BBB::number;
        printf("%dn",number);
//-----------------------------------
3.匿名空间
    相当于全局变量,但是只能在本文使用
    namespace
    {
        int data;
    }
    data 只能在本文件使用,其他文件不能使用
//-----------------------------------
**练习:**
    设计两个命名空间class01,class02,空间中的成员有名字,年龄和编号
    把空间名里面的成员(变量)个人信息,并且通过输入初始化信息,同时输出
    class01,class02里面的成员信息
    demo:
    //-----------------------------------
    ```cpp
    #include 

    // 定义命名空间
    namespace class01
    {
        char name[100] = "jack";
        int age = 18;
        int number = 123;
    }

    namespace class02
    {
        char name[100] = "rose";
        int age = 19;
        int number = 456;
    }

    int main()
    {
        scanf("%s%d%d",class01::name,&class01::age,&class01::number);
        scanf("%s%d%d",class02::name,&class02::age,&class02::number);

        printf("class01::name : %s,class01::age : %d,class01::number : %dn", 
                class01::name, class01::age, class01::number );

        printf("class02::name : %s,class02::age : %d,class02::number : %dn", 
                class02::name, class02::age, class02::number );

        return 0;
    }



```cpp
#include 
//using namespace std :执行这步,可写或不写std::
using namespace std;
//1外部调用c语言的头库,便于区分
extern "C"
{
    #include 
    #include 
    #include 
}
//制作c语言动态库指令
//gcc call.c -fPIC -shared -o libcall.so

//namespace:命名空间成员引用
namespace class_name
{
    char name[10]="jack";
    int age=18;
}

//直接通过命名空间::成员(建议使用)
//class_name::name
//:: 就像一个箭头(->)指向成功名
//class_name:就像普通指针、结构体指针或结构体变量

//using namespace class_name;
//using:指示符引用成员,将class_name暴露在文件中
//printf("%d",name)


//2命名空间的嵌套(打印必须AAA::BBB::"num)
namespace   AAA
{
    namespace BBB
    {
        int num =10;
    }
    int cc=12;
}
namespace AAA
{
    int num=11;  //不会覆盖
}


//练习
namespace class01
{
    char name[20];
    short age;
    unsigned ID;
}
namespace class02
{
    char name[20];
    short age;
    unsigned ID;
}
//3匿名空间
//相当于全局变量(static),其他文件不可见,只在当前有效
//data 只能在本文件使用,其他文件不能使用
namespace
{
    int data=100l;
}


//4输入输出c++
int main(void)
{   
    printf("给class01的name;age;ID赋值n");
    scanf("%s",class01::name);
    scanf("%hd",&class01::age);
    scanf("%u",&class01::ID);

    printf("给class02的name;age;ID赋值n");
    scanf("%s",class02::name);
    scanf("%hd",&class02::age);
    scanf("%u",&class02::ID);
    
    std::cout<<"打印结果"<<"n";
    std::cout<<"33[32m01::name=33[0m"<BBB:num="<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430042.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号