关于C++域作用符
1.引用全局作用域中的变量,函数等
1 2 3 4 5 6 7
| int a;
void foo() { int a = 2; std::cout << a << std::endl; std::cout << ::a << std:: endl; }
|
2.指定某个范围(类,命名空间等)内的成员
1 2 3 4 5 6 7 8
| class Demo { public: void foo(); }
void Demo::foo() { std::cout << "Hello World" << std::endl; 这里的的域作用符就是指定使用命名空间std中的cout,endl对象 }
|
解释以下代码为什么会报错:
1 2 3 4 5
| class A {}; class B : A {}; class C : B { A a; };
|
C++标准规定,名字查找顺序中,基类的查找顺序优先于类所在的命名空间.这里是私有继承,因为C无法访问B的私有成员,所以报错,修改方式如下:
1 2 3 4 5 6 7 8 9 10 11
| class A {}; class B : public A {}; class C : public B { A a; }; 或 class A {}; class B : A {}; class C : B { ::A a; };
|
script>