C++进阶--命名空间和关键字using

//############################################################################
/*
 * C++关键字:using
 *
 * 1. using指示: 将命名空间所以成员引入当前作用域
 *   例子:
 */
   using namespace std;

 /* 2. using声明
  *   a. 将一个特定命名空间成员引入当前作用域
  *   b. 将一个成员从基类引入当前类的作用域
  *   例子:
  */
   using std::cout;
   cout << "Hello world.\n";

using namespace std;  // case 1, global scope
using std::cout;     // case 2.a, gloabal scope

class B {
   public:
   void f(int a);
};

class D : private B {
   public:
      void g() {
         using namespace std;  // case 1, local scope
         cout << "From D: \n";
      }
      void h() {
         using std::cout;     // case 2.a, local scope
         cout << "From D: \n";
      }
      using B::f;   // case 2.b,  class scope
};

D d;
d.f(8);

/* Notes:
 * 1. using声明和using指示用于命名空间时,可以在全局或者局部作用域
 * 2. using声明当用于类成员时,可以用于类作用域。下面是一个使用例子
 */

class B {
   public:
      void f(int a);
};

class D : public B {
   public:
      using B::f;
      void f();     //先从最近的派生类搜索,命中之后就停止搜索,再检查参数是否匹配
};

int main() {
   D d;
   d.f(8);      //编译错误,可通过加using B::f修复;
}

/*
 * 匿名的命名空间
 */
static void h() { std::cout << "h()\n"; }

void g() { std::cout << "global g()\n"; }
namespace {
    void g() { std::cout << "g()\n"; }       //匿名命名空间中的所有东西,都可以在本文件中被访问
   void h() { std::cout << "h()\n"; g(); }  //调用本地的g()
}

int main() {
   h();
}

原文地址:https://www.cnblogs.com/logchen/p/10176935.html

时间: 2024-10-13 10:05:33

C++进阶--命名空间和关键字using的相关文章

C++进阶--模板及关键字typename

//############################################################################ /* * 模板介绍 */ //函数模板 template<typename T> T square(T x) { return x*x; } //类模板 template<typename T> class BoVector { T arr[1000]; int size; public: BoVector():size(0)

进阶Kotlin-常见关键字

常见Kotlin 的关键字   一些常见的语法,我没有写注释. 前面基础的kotlin语法已经弄完了. 现在是高阶kotlin的语法啊. 包括,面向对象,lambad等. 其中面向对象的三大特点:封装 继承 多态 lambad基础使用 集合和字典等 关键字 解释 关键字 解释 if for while when else break continue 返回最近层循环体 do class 类 fun 函数 package 包 interface 接口 public 公开 private 私有 pr

Java——面向对象进阶(final关键字,static关键字,匿名对象,内部类,包的声明与访问,四种访问修饰符,代码块)

一.final关键字 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,那怎么解决呢? 要解决上述的这些问题,需要使用到一个关键字final,final的意思为最终,不可变.final是个修饰符,它可以用来修饰类,类的成员,以及局部变量. 1.修饰类 被final修饰的类不可以被继承,但是可以继承其他类. class Yy {} final cl

Java进阶(6) - 并发(关键字)

并发的特性1.可见性a. 保证任何一个线程修改变量立即写入到主内存中(堆):b. 所有线程对该变量引用会强制立即失效,并且该线程必须去堆中获取最新的变量值. 2.指令重排序代码的执行顺序 会在JVM中(编译器优化 指令级并行重排序 内存系统重排序 最终执行的指令序列) 3.原子性同一时刻最多只有一个线程访问该段代码. Volatile -> 可见性.指令重排序 Synchronied -> 可见性.指令重排序.原子性 lock存在价值synchronized只在以下2种情况下会释放锁1)获取锁

PHP的 Final关键字、类(文件)的加载和命名空间

** Final.类(文件)的加载和命名空间 1.final 关键字-----终态的.最终的 final 关键字用于修饰类和方法:修饰的类不能被继承,修饰的函数方法(public)在子类中不能被重载. 如果父类中的方法被声明为 final,则子类无法覆盖该方法.如果一个类被声明为 final,则不能被继承. 类使用 final 关键字的例子: final class Person{ ...... } final 定义的类被继承时会提示如下错误: Fatal error: Class Studen

C++关键字、命名空间、函数重载、缺省参数、内联函数、引用

一 .C++入门 1.C++关键字 2.命名空间 3.C++输入&输出 4.缺省参数 5.函数重载 6.引用 7.内联函数 8.auto关键字 9.基于范围的for循环 10.指针空值nullptr&nullptr_t 二. 正文 1.C++关键字(C++98) C++98中的关键字总共用63个,如下表: 在这这做简单介绍,感兴趣的朋友可以参考相关资料作进一步了解. 2.命名空间 由于在编写程序的过程中,很容易出现变量.函数和类重名的现象,这些变量.函数和类都在全局作用域中,因此会导致很多

C++命名空间

-------siwuxie095 C++命名空间(namespace) 什么是命名空间: 简言之,就是为程序划片取名字 程序中的命名空间: 如:A 公司的程序库 与 B 公司的程序库(二者毫无联系), 都将卖给 C 公司 如果 C 软件公司购买了 A 公司和 B 公司的程序库,想使用 A 公司的变量 x 和 B 公司的函数 f1,怎么办? [ C 公司怎么办,A 公司和 B 公司如何写自己的代码, 所以 A 公司和 B 公司要使用命名空间 ] (即 为什么要有命名空间) 解决方案: 使用命名空

final,类的自动加载,命名空间

final是干什么的一般是为了防止父类的一个方法被重写如果父类中的方法被声明为 final,则子类无法覆盖该方法.如果一个类被声明为 final,则不能被继承. Note: 属性不能被定义为 final,只有类和方法才能被定义为 final. 类的自动加载类的自动加载是指,在外面的页面中,并不需要去"引入"类文件,但是程序会在需要的时候动态加载需要的类文件. spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(in

Namespaces命名空间

命名空间的定义 1 namespace cplusplus_primer{ 2 class Sales_item{/*.....*/}; 3 Sales_item operator+(const Sales_item&,const Sales_item&); 4 class Query{ 5 public: 6 Query(const std::string&); 7 std::ostream &display(std::ostream&) const; 8 //.