C++ 什么';这两种说法的区别是什么
这两种说法有什么区别C++ 什么';这两种说法的区别是什么,c++,oop,C++,Oop,这两种说法有什么区别 ob.A::ar[0] = 200; ob.ar[0] = 200; 其中,ob是类A class A { public: int *ar; A() { ar = new int[100]; } }; 没有区别。在这种情况下,ar的显式名称空间限定是多余的 在(多个、非虚拟的)继承重新定义名称ar的情况下,它可能不是多余的。样本(人为): #包括 甲级 { 公众: int*a
ob.A::ar[0] = 200;
ob.ar[0] = 200;
其中,ob
是类A
class A
{
public:
int *ar;
A()
{
ar = new int[100];
}
};
没有区别。在这种情况下,
ar
的显式名称空间限定是多余的
在(多个、非虚拟的)继承重新定义名称ar
的情况下,它可能不是多余的。样本(人为):
#包括
甲级
{
公众:
int*ar;
A(){ar=new int[100];}
//不相关,但防止泄漏:(三原则)
~A(){delete[]ar;}
私人:
A(常数&);
A&运算符=(常数&);
};
B类:公共A
{
公众:
std::字符串ar[12];
};
int main()
{
B ob;
ob.A::ar[0]=200;
ob.ar[0]=“你好世界”;
}
在这种情况下,没有区别。但是,假设ob属于C类,继承自A类和B类,并且A和B都有一个字段ar。那么除了显式指定您引用的继承数据成员之外,没有其他方法可以访问ar。在这种情况下没有区别 此符号:
obj.Class::member
只是为了解决继承带来的歧义:
class A {
public:
int a;
}
class B {
public:
int a;
}
class C : public A, B {
void func() {
// this objects holds 2 instance variables of name "a" inherited from A and B
this->A::a = 1;
this->B::a = 2;
}
}
你应该读这个
ob.A::ar[0] = 200;
ob.ar[0] = 200;
像这样
A::ar[0]
对于ar[0]
来说是一样的,所以这两行基本上是一样的,操作符::
用于指示名称空间的所谓解析,或者只是名称空间
由于
ob
是类型A的对象,名称空间解析是隐式的,在访问ar[0]
之前,您不需要A::
,您能解释一下您在类A中作为私有代码编写的内容吗?@Rushil嗯,这确实离题了:这是防止A
被复制的最快方法(这将导致双重删除A::ar
)。在C++11中,它被称为或:)好的。我知道这是离题的,但我想知道这是什么意思。:-)
ob.A::ar[0] = 200;
ob.ar[0] = 200;