C++の静的アセンブリと動的アセンブリ


//               ,       
#include <iostream>
using namespace std;

class A{
public:
    void print(){
        cout << "a" <<endl;
    }
};
class B:public A{
public:
    void print(){
        cout << "b" <<endl;
    }
};
class C:public A{
public:
    void print(){
        cout << "c" <<endl;
    }
};
void main(){
    //       ,                           ,         
    A a;
    B b;
    C c;
    a.print();
    b.print();
    c.print();
    getchar();
}

出力結果:
a
b
c
#include <iostream>
using namespace std;

class A{
public:
     void print(){
        cout << "a" <<endl;
        //   virtual      ,          ,           
        //,  virtual      ,             
    }
};
class B:public A{
public:
    void print(){
        cout << "b" <<endl;
    }
};
class C:public A{
public:
    void print(){
        cout << "c" <<endl;
    }
};
void main(){
    //       ,                           ,         
    A a;
    B b;
    C c;
    A *p1 = &a;
    A *p2 = &b;
    A *p3 = &c;
    p1->print();
    p2->print();
    p3->print();
    getchar();
}

出力結果:
a
a
a
#include <iostream>
using namespace std;

class A{
public:
     virtual void print(){
        cout << "a" <<endl;
        //   virtual      ,          ,           
        //,  virtual      ,             
    }
};
class B:public A{
public:
    void print(){
        cout << "b" <<endl;
    }
};
class C:public A{
public:
    void print(){
        cout << "c" <<endl;
    }
};
void main(){
    //       ,                           ,         
    A a;
    B b;
    C c;
    A *p1 = &a;
    A *p2 = &b;
    A *p3 = &c;
    p1->print();
    p2->print();
    p3->print();
    getchar();
}

出力結果:
a
b
c
/***************************************************************
/***************************************************************
コンパイル時の静的アセンブリand実行中の静的アセンブリandコンパイル時の動的アセンブリand実行中の動的アセンブリ
#include <iostream>
using namespace std;

class A{
public:
    virtual void print(){
        //  virtual,     ,                ,            ,                  
        //   virtual     ,       ,      ,        ,         ,    
        cout << "a" <<endl;
    }
};
class B:public A{
public:
    void print(){
        cout << "b" <<endl;
    }
};
int main(){
    bool ant = false;
    A *p;
    while(1){
        cout <<"   a,b,c:";
        char choose;
        cin >> choose;
        switch(choose){
            case 'a': p = new A;
                break;
            case 'b': p = new B;
                break;
            case 'c':ant = true;
                break;
            default:
                cout << "   a,b,c:";
                break;
        }
        if(ant==true)
            break;
         p->print();
    }
    getchar();
    return 0;
}
/*  virtual   :
   a,b,c:a
a
   a,b,c:b
b
  virtual   :
   a,b,c:a
a
   a,b,c:b
a

注:ポインタや引用を付けなければダイナミックカップリングとは関係ない!!!