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"<


