#include <iostream>
using namespace std;
class AA{
private:
int a;
public:
AA(int a) {this->a = a;}
void print(){cout << a << endl;}
virtual void myFun() {cout << "in AA class!! \n";}
};
class BB : public AA{
public:
BB(int a) : AA(a) {};
void print(){cout << "bb print funs\n";}
virtual void myFun() {cout << "in BB class!! \n";}
};
int main(){
AA a(1);
BB b(99);
cout << " . " << endl;
a.myFun();
a.print();
b.myFun();
b.print();
cout << " -> " << endl;
AA *p;
p = &a;
p->myFun();
p->print();
p = &b;
p->myFun();
p->print();
return 0;
<style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Hack; color: #d12f1b; background-color: #ffffff} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Hack; color: #ba2da2; background-color: #ffffff} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; background-color: #ffffff; min-height: 14.0px} p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Hack; color: #000000; background-color: #ffffff} p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Hack; color: #000000; background-color: #ffffff; min-height: 11.0px} span.s1 {color: #78492a} span.s2 {color: #000000} span.s3 {color: #703daa} span.s4 {color: #4f8187} span.s5 {color: #3e1e81} span.s6 {color: #ba2da2} span.s7 {color: #d12f1b} span.s8 {color: #272ad8} span.s9 {color: #31595d} </style>
}
예제소스인데 . 으로 접근하는 거랑 -> 으로 접근하는 거랑 결과가 왜다름?
포인터가 AA 형이니까 virtual 형이 아닌 print() 를 접근하면 무조건 AA:print() 를 접근할 수 밖에
. 으로 접근할 땐 b 가 BB 형인걸 알고 있으니 BB::print() 를 접근하지만, -> 로 접근할 땐 AA 형 포인터로만 선언해놨으니 닥 AA::print() 를 접근하지.
ㄴ ㄱㅅㄱㅅㄱㅅ