Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
'class1' : hakimiyeti aracılığıyla 'class2::member' devralır
İki veya daha fazla üye aynı ada sahiptir. class2
içindeki, bu üyeyi içeren diğer sınıflar için bir temel sınıf olduğundan devralınır.
C4250'yi engellemek için uyarı pragması kullanın.
Bir sanal temel sınıf birden çok türetilmiş sınıf arasında paylaşıldığından, türetilmiş bir sınıftaki bir ad temel sınıftaki bir ada hakimdir. Örneğin, aşağıdaki sınıf hiyerarşisi göz önüne alındığında, elmas içinde devralınan iki func tanımı vardır: zayıf sınıf aracılığıyla vbc::func() örneği ve baskın sınıf aracılığıyla baskın::func() örneği. Bir elmas sınıf nesnesi aracılığıyla nitelenmemiş func() çağrısı, her zaman dominate::func() örneğini çağırır. Zayıf sınıf bir func() örneği tanıtırsa, hiçbir tanım baskın olmaz ve çağrı belirsiz olarak işaretlenir.
Örnekler
// C4250.cpp
// compile with: /c /W2
#include <stdio.h>
struct vbc {
virtual void func() { printf("vbc::func\n"); }
};
struct weak : public virtual vbc {};
struct dominant : public virtual vbc {
void func() { printf("dominant::func\n"); }
};
struct diamond : public weak, public dominant {};
int main() {
diamond d;
d.func(); // C4250
}
Aşağıdaki örnek C4250 oluşturur.
// C4250_b.cpp
// compile with: /W2 /EHsc
#include <iostream>
using namespace std;
class A {
public:
virtual operator int () {
return 2;
}
};
class B : virtual public A {
public:
virtual operator int () {
return 3;
}
};
class C : virtual public A {};
class E : public B, public C {}; // C4250
int main() {
E eObject;
cout << eObject.operator int() << endl;
}
Bu örnekte daha karmaşık bir durum gösterilmektedir. Aşağıdaki örnek C4250 oluşturur.
// C4250_c.cpp
// compile with: /W2 /EHsc
#include <iostream>
using namespace std;
class V {
public:
virtual int f() {
return 1024;
}
};
class B : virtual public V {
public:
int b() {
return f(); // B::b() calls V::f()
}
};
class M : virtual public V {
public:
int f() {
return 7;
}
};
// because of dominance, f() is M::f() inside D,
// changing the meaning of B::b's f() call inside a D
class D : public B, public M {}; // C4250
int main() {
D d;
cout << "value is: " << d.b(); // invokes M::f()
}