非凡软件站,网站服务器到期为什么要网站备案,公关公司排名,一个前端页面多少钱一、命名空间基本概念
1.1 命名空间定义
namespace 命名空间名
{变量名;函数;结构体;枚举名;
}
1.2 全局引入命名空间
using namespace 命名空间名;
1.3 部分引入命名空间
using namespace 命名空间名::变量名
注意#xff1a;::表示域限定符#xff0c;在哪个位置使用…一、命名空间基本概念
1.1 命名空间定义
namespace 命名空间名
{变量名;函数;结构体;枚举名;
}
1.2 全局引入命名空间
using namespace 命名空间名;
1.3 部分引入命名空间
using namespace 命名空间名::变量名
注意::表示域限定符在哪个位置使用在哪写域限定符
1.4 命名空间冲突问题 1.4.1 局部变量和命名空间冲突 当局部变量和命名空间冲突时即使引入命名空间但在使用时因为就近原则所以默认使用局部变量如果想要使用命名空间中的变量则需要使用域限定符。
#include iostream
using namespace std;namespace zpp {int age;char name[20] zhangsan;int cout;
}
using namespace zpp;int main()
{//定义局变量char name[20] hello;std::coutname nameendl; //hellostd::coutname zpp::nameendl; //zhangsanreturn 0;
}
1.4.2 多个命名空间中命名冲突问题 当遇到多个命名空间冲突问题通常有两种解决方法1只引入某一个命名空间引入需要使用的命名空间的标识符。2在使用变量时使用域限定符。
#include iostream
using namespace std;namespace zpp {int age;char name[20] zhangsan;int cout;
}
using namespace zpp;
int main()
{std::cout Hello World! endl;//当多个命名空间名产生冲突时可以使用命名空间名和作用域限定符解决std::coutzpp::coutendl; //0return 0;
}
1.4.3 全局变量和命名空间冲入问题 当全局变量和命名空间冲突 通常有两种解决方法1只引入某一个命名空间引入需要使用的命名空间的标识符。2在使用变量时使用域限定符全局变量默认和匿名空间存在一起。
#include iostream
using namespace std;namespace zpp {int age;char name[20] zhangsan;int cout;
}
using namespace zpp;//定义全局变量
int age 30;int main()
{std::cout Hello World! endl;//当命名空间中的名字和全局变量冲突时也要用命名空间名和作用域限定符区分zpp::age 18;//使用全局变量的方式系统会将全局变量放到一个命名空间中该命名空间为匿名空间//匿名空间中的名字使用方式 ::名字std::coutzpp::age zpp::age 全局age ::ageendl;return 0;
}
1.5 命名空间添加 如果定义多个相同的命名空间名最后会合并成一个命名空间。
namespace A
{int num;int a;
}
namespace A
{int b;
}
1.6 命名空间的嵌套 如果在一个命名空间A内嵌套另一个命名空间B在引入命名空间B时需要逐级引入。
#include iostream
using namespace std;namespace A
{int a 0;namespace B{int a 100;char c a;}
}using namespace A;
using namespace A::B;
int main()
{cout A::a endl; //a 0;cout A::B::a endl; //a 100; return 0;
}
1.7 给命名空间重命名
namespace A
{int a 0;
}
namespace NEW A;
1.8 总结
定义命名空间关键字为namespace声明命名空间使用关键字using命名冲突问题多个命名空间冲突、命名空间与全局变量冲突、命名空间与局部变量冲突解决方法加上命名空间名和作用域限定符命名空间可以嵌套定义需要使用作用域限定符一级一级找到最低一级进行使用一个程序可以定义多个同名的命名空间但是要求命名空间中的名字不能相同
二、练习 定义一个学生的结构体包含学生的姓名年龄成绩性别学生的成绩姓名定义为私有权限;定义一个学生类型的结构体变量设置公有函数用于给学生的成绩和名字进行赋值(结构体中的函数:结构体中声明结构体外定义)
#include iostreamusing namespace std;
struct stu
{int age;float score;string sex;void func();void set_name(string str,float s){name str;score s;}
private:string name;
};void stu::func()
{cout name endl;cout age endl;cout sex endl;cout score endl;
}
int main()
{stu students;string str zhangsan;students.age 18;students.sex 男;float s 95;students.set_name(str,s);students.func();return 0;
}