...
Code Block | ||||
---|---|---|---|---|
| ||||
// File1.h
class B {
protected:
double d;
public:
B() : d(1.0) {}
};
// File2.h
void g(class D *);
class B *get_d(); // Returns a pointer to a D object
// File1.cpp
#include "File1.h"
#include "File2.h"
void f() {
B *v = get_d();
g(reinterpret_cast<class D *>(v));
}
// File2.cpp
#include "File2.h"
#include "File1.h"
#include <iostream>
class Hah {
protected:
short s;
public:
Hah() : s(12) {}
};
class D : public Hah, public B {
float f;
public:
D() : Hah(), B(), f(1.2f) {}
void do_something() { std::cout << "f: " << f << ", d: " << d << ", s: " << s << std::endl; }
};
void g(D *d) {
d->do_something();
}
B *get_d() {
return new D;
}
|
...
Code Block | ||||
---|---|---|---|---|
| ||||
// File1.h
class B {
protected:
double d;
public:
B() : d(1.0) {}
};
// File2.h
void g(class B *); // Accepts a B object, expects a D object
class B *get_d(); // Returns a pointer to a D object
// File1.cpp
#include "File1.h"
#include "File2.h"
void f() {
B *v = get_d();
g(v);
}
// File2.cpp
#include "File2.h"
#include "File1.h"
#include <iostream>
class Hah {
protected:
short s;
public:
Hah() : s(12) {}
};
class D : public Hah, public B {
float f;
public:
D() : Hah(), B(), f(1.2f) {}
void do_something() { std::cout << "f: " << f << ", d: " << d << ", s: " << s << std::endl; }
};
void g(B *d) {
D *t = static_cast<D *>(d);
if (t) {
t->do_something();
} else {
// Handle error
}
}
B *get_d() {
return new D;
} |
...