Aşağıdaki kodların davranışlarını açıklayan var mı?Adresler, yeniden yazım ve çoklu kalıtım
- Neden yani
b2 == &d
doğrudur, ilk durumdab = 3
var mı? - Neden Durum 2'de sorun yok?
b2
ved
adreslerini yazdım ve bunlar farklı. Eğer B için bir işaretçi C için bir işaretçi dönüştürmek zaman
#include <iostream>
using namespace std;
class A
{
public:
A() : m_i(0) { }
protected:
int m_i;
};
class B
{
public:
B() : m_d(0.0) { }
protected:
double m_d;
};
class C
: public A
, public B
{
public:
C() : m_c('a') { }
private:
char m_c;
};
int main()
{
C d;
B *b2 = &d;
cout << &d << endl;
cout << b2 << endl;
const int b = (b2 == &d) ? 3 : 4; ///Case1: b = 3;
const int c = (reinterpret_cast<char*>(b2) == reinterpret_cast<char*>(&d)) ? 3 : 4; //Case 2: c = 4;
std::cout << b << c << std::endl;
return 0;
}
+1, bunun iyi bir örnek olduğunu ve çok sayıda mirasın etkilerini çok iyi bir şekilde gösterdiği için – ltjax
+1 aynı şekilde. Özellikle zil aracılığıyla insanları gerçekten göndermek için orada hiçbir sanal ile mükemmel bir örnek. – WhozCraig