shaaadi
شنبه 29 خرداد 1389, 18:03 عصر
//#include "stdafx.h"
#include "iostream"
#include "iomanip"
using namespace std;
class A {
public:
virtual void f() const =0;
void g() const {};
};
class B : public A {
public:
B( int = 0, int = 0 );
virtual void f() const { cout << "B: "; }
void g() const ;
private:
int x, y;
};
class C : public B {
public:
C( double r2 = 0.0, int x = 0, int y = 0 );
virtual void f() const { cout << "C: "; }
void g() const;
private:
double r;
};
B::B( int a, int b ) { x=a; y=b; }
void B::g() const
{ cout << '[' << x << ", " << y << ']'; }
C::C( double r2, int a, int b )
: B( a, b ) // call base-class constructor
{ r= r2 ; }
void C::g() const
{
B::g();
cout << "; R = " << r;
}
void main()
{
B x( 2, 6 );
C y( 1, 30, 40 );
x.f();
x.g(); cout << '\n';
y.f();
y.g(); cout << '\n';
A *arrayOfObjects[ 3 ];
arrayOfObjects[ 0 ] = &y;
arrayOfObjects[ 1 ] = &x;
arrayOfObjects[ 2 ] = (B*)&y;
for ( int i = 0; i < 3; i++ )
{
cout << "1" << endl;
arrayOfObjects[ i ]->f();
cout << "2" << endl;
arrayOfObjects[ i ]->g();
}
int x2;
cin >> x2;
}
این یه برنامه ی سادست برای کار با virtual ... که یه ارایه از *A ساخته ... اما نمی دونم چرا عنصر سوم آرایه که cast شده به *B اما باز هم مثل *C عمل میکنه و در واقع f ای که در C هست صدا زده میشه ؟
#include "iostream"
#include "iomanip"
using namespace std;
class A {
public:
virtual void f() const =0;
void g() const {};
};
class B : public A {
public:
B( int = 0, int = 0 );
virtual void f() const { cout << "B: "; }
void g() const ;
private:
int x, y;
};
class C : public B {
public:
C( double r2 = 0.0, int x = 0, int y = 0 );
virtual void f() const { cout << "C: "; }
void g() const;
private:
double r;
};
B::B( int a, int b ) { x=a; y=b; }
void B::g() const
{ cout << '[' << x << ", " << y << ']'; }
C::C( double r2, int a, int b )
: B( a, b ) // call base-class constructor
{ r= r2 ; }
void C::g() const
{
B::g();
cout << "; R = " << r;
}
void main()
{
B x( 2, 6 );
C y( 1, 30, 40 );
x.f();
x.g(); cout << '\n';
y.f();
y.g(); cout << '\n';
A *arrayOfObjects[ 3 ];
arrayOfObjects[ 0 ] = &y;
arrayOfObjects[ 1 ] = &x;
arrayOfObjects[ 2 ] = (B*)&y;
for ( int i = 0; i < 3; i++ )
{
cout << "1" << endl;
arrayOfObjects[ i ]->f();
cout << "2" << endl;
arrayOfObjects[ i ]->g();
}
int x2;
cin >> x2;
}
این یه برنامه ی سادست برای کار با virtual ... که یه ارایه از *A ساخته ... اما نمی دونم چرا عنصر سوم آرایه که cast شده به *B اما باز هم مثل *C عمل میکنه و در واقع f ای که در C هست صدا زده میشه ؟