分类: C/C++
2013-08-29 10:39:31
类继承
★ 对于父类函数(virtual、非virtual),如果子类没有同名函数,则正常继承
★ 对于父类函数(virtual、非virtual),如果子类有同名函数,无同型函数,则不能调用父类函数
★ 对于父类函数(virtual、非virtual),如果有同型函数:
----非virtual函数由指针类型决定调用哪个
----virtual函数由指针指向的对象决定调用哪个(运行时决定)
//如果对于父类函数(virtual/非virtual),如果子类没有同名函数,则正常继承
class Base
{
public: void func(int i){ cout <<"Base::func(int)"<< endl; } 
}; 

class Derived : public Base
{ }; 

int main()
{
Base *pb = new Derived();
pb->func(1); //Base::func(int)
delete pb; 

Derived *pd = new Derived();
pd->func(1); //Base::func(int)
delete pd; 
}
//对于父类函数(virtual、非virutal),子类有同名函数,无同型函数,则不能调用父类函数
class Base
{
public:
void func(int i){ cout <<"Base::func(int i)"<< endl; } 
virtual void func2(int i) { cout << "Base::func2(int i)" << endl;}
}; 

class Derived : public Base
{
public: 
void func(){ cout <<"Derived::func()"<< endl; } 
void func2(){ cout <<"Derived::func2()"<< endl; } 
}; 

int main()
{
Base *pb = new Derived();
pb->func(1); //Base::func(int)
pb->func2(1); //Base::func2(int i)
delete pb; 

Derived *pd = new Derived();
pd->func(); //Derived::func()
pd->func2(); //Derived::func2()
// pd->func2(1); //不能调用 
delete pd; 
}
//对于父类函数(virtual、非virtual),如果有同型函数:
//----非virtual函数由指针类型决定调用哪个
//----virtual函数由指针指向的对象决定调用哪个(运行时决定)
class Base
{ public:
void func(int i){ cout <<"Base::func(int i)"<< endl; }
void func() {cout << "Base::func() " << endl;}
virtual void func2(int i) { cout << "Base::func2(int i)" << endl;}
}; 

class Derived : public Base
{ public: 
void func(int i){ cout <<"Derived::func()"<< endl; } 
void func2(int i){ cout <<"Derived::func2(int i)"<< endl; } 
}; 

int main()
{
Base *pb = new Derived();
pb->func(1); //Base::func(int i)
pb->func(); //Base:func()
pb->func2(1); //Derived::func2(int i)
delete pb; 

Derived *pd = new Derived();
pd->func(1); //Derived::func(int i)
// pd->func(); //不能调用 
pd->func2(1); //Derived::func2(int i)
delete pd;
}