?????????????????У?C++????????????????????????У????????????????????????????????£???????????????????C???????????????Э???????????????????
??????????????????????????????(mian)??(shi)?????????ó?????????????μ?????
???????????G++????????????????????????C++??????????????????????????????????а??? ???á???(???????????????)?????(????????????)?????????
????Here we go!
????????
??????????????????????????C++ primer???????????????????????????????????????
????????
int invoke(int a) {
return ++a;
}
int main(int argc?? char **argv) {
int a = 123;             //       movl   $123??-20(%rbp)
int *pa = &a;            //       leaq    -20(%rbp)??%rax
//       movq    %rax??-16(%rbp)
int &ra = a;             //       leaq    -20(%rbp)??%rax
//       movq    %rax??-8(%rbp)
invoke(a);               //       movl    -20(%rbp)??%eax
//       movl    %eax??%edi
//       call    _Z6invokei
invoke(*pa);             //       movq    -16(%rbp)??%rax
//       movl    (%rax)??%eax
//       movl    %eax??%edi
//       call    _Z6invokei
invoke(ra);              //       movq    -8(%rbp)??%rax
//       movl    (%rax)??%eax
//       movl    %eax??%edi
//       call    _Z6invokei
}
???????????pa????????a???????ra?????a??????????????????????pa??ra??????????????????????????????????????????????????????????????????a????????????????????????????????????
???????????????????????????????????????????????????????????????????????????в????????
???????????????????ü?????д??????????//TODO
??????(???????????????)
???????????????б???????±????????????????????????????涼????????????????????????????????????????????????????????????????????????????????????????
?????????????????????У???Щ????????????????е?????????????????????????????????????????????ν?????????????????????????ж???
?????????????????????????????????б???ú???????????????
int invoke(int a) {                   //        _Z6invokei
return ++a;
}
class Animal {
public:
int age;
int weight;
Animal(): age(0)?? weight(0.0) {}    //        _ZN6AnimalC2Ev
void run() { }                      //        _ZN6Animal3runEv
};
class Human {
public:
Human() {}                          //        _ZN5HumanC2Ev
};
int main(int argc?? char **argv) {
Animal cat;                         //        leaq  -16(%rbp)?? %rax
//        movq  %rax?? %rdi
//        call  _ZN6AnimalC1Ev
cat.age = 5;                        //        movl  $5?? -16(%rbp)
cat.weight = 2;                     //        movl  $2?? -12(%rbp)
cat.run();                          //        leaq  -16(%rbp)?? %rax
//        movq  %rax?? %rdi
//        call  _ZN6Animal3runEv
}
??????????????????????????????????Animal??????Human??
?????????main???????
????????????
???????????Animal cat;??????????Animal?????cat?????????????????????cat???????????????????????????????16??????????-16(%rbp)?????cat????????rdi??????????????C++???????????????????????????this??????????????????_ZN6AnimalC1Ev??????????У???Animal????????????????????????????Animal??????????
???????????
?????????????????C????????????????
???????????????
????????????run()???????????????????????????????????????
???????G++????????ж??????????????????
????Animal ??
????????????? invoke() _Z6invokei
????????????????run() _ZN6Animal3runEv
???????????? Animal() _ZN6AnimalC2Ev
????Human ??
???????????? Human() _ZN5HumanC2Ev
???????????????C++?漲????????????????÷?????????????????????ò?????????????????ó???????????????this????????????ó?????????±???????????????????к?????????????????????????????????С?
?????????????????????C++??????????
???????????????????ν?????????????????????ν??????????????????????????????????????????????ν??????????????????????????????????????????????????Щ????????????????????????
???????(????????????)
????????

??????????????????????????????????????????????????:
????class Animal {
????public:
????void run() {}                     //      _ZN6Animal3runEv
????void run(int a) {}                //      _ZN6Animal3runEi
????void run(char b) {}               //      _ZN6Animal3runEc
????void run(int a?? Human p) {}       //      _ZN6Animal3runEi5Human
????};
????G++???????????????????????β??б?????????е????????????ν???????????
???????
???????????????????????????????????????????????????????г?????????丸?????????????С???????????????????????????е??????????????
???????????????????????????????????????????
????????????
class Animal {
public:
virtual void run() {}              //     _ZN6Animal3runEv
};
class Cat : public Animal {
public:
void run() {}                      //     _ZN3Cat3runEv
};
int main(int argc?? char **argv) {
Animal *tom = new Cat();           //     _ZN3CatC2Ev:
//         _ZN6AnimalC2Ev:
//         movq  $_ZTV6Animal+16?? (%rax)
//     movq  $_ZTV3Cat+16?? (%rax)
tom.run();                         //     movq  %rbx?? -24(%rbp)
//     movq  -24(%rbp)?? %rax
//     movq  (%rax)?? %rax
//     movq  (%rax)?? %rax
//     movq  -24(%rbp)?? %rdx
//     movq  %rdx?? %rdi
//     call  *%rax
}
?????????????new Cat()??????2????????????????????????????????????????????????????????(%rax)???tom????????е????λ??????????Ч??????????movq $_ZTV3Cat+16?? (%rax)??Cat???_?麯????_????????cat????????λ?á?
???????tom.run()????????????????????call *%rax?????????Cat????麯???????????????
??????????ν????????????????????????????ν??????????????????????????????????Щ?????????????????tom??????Cat?????????????tom????????run???е????????tom.run()???????????call _ZN3Cat3runEv??
???????????????????????????????????????????????????:
????int main(int argc?? char **argv) {
????Animal *tom;
????if (argc == 0)
????tom = new Animal();
????else
????tom = new Cat();
????tom->run();
????}
?????????????tom->run()?????????????????????run????????????????δ?????????????????????????????????????????????????????tom?????????????????????麯?????????????????????????????????
???????????
class Cat {};
class Mouse {};
template <typename T>
class Cave {
public:
void capture(T& a) {};
};
int main(int argc?? char **argv) {
Cat tom;
Mouse jerry;
Cave<Cat> catsCave;
catsCave.capture(tom);               //       call  _ZN4CaveI3CatE7captureERS0_
Cave<Mouse> miceCave;
miceCave.capture(jerry);             //       call  _ZN4CaveI5MouseE7captureERS0_
}
????????????????????????????????????????????????????
????????????????????????м?????????????????????????????????????????????????????????????
??????????????????????????????è?????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????C++????????
?????????д????????C++???????Щ????????????????????????·???Щ??????
?????????C++?????????????????仰??C++???????????????????????