子类调用父类成员函数的方法:
1、直接在子类重写的函数中调用父类成员函数
#include <iostream>
using namespace std;
class Animal
{
public:
int m_age;
virtual void speak()
{
cout << "Animal::speak() " << endl;
}
virtual void run()
{
cout << "Animal::run() " << endl;
}
};
class Cat :public Animal
{
public:
int m_life;
//重写
void speak()
{
//在这里调用父类成员函数,直接加父类作用域即可;
Animal::speak();
cout << "Cat::speak() " << endl;
}
void run()
{
cout << "Cat::run() " << endl;
}
};
int main()
{
Animal* p = new Cat();
//这样访问不行
//p->m_life = 10;
//这样调用子类的speak()就会调用到父类的speak();
p->speak();
p->run();
getchar();
return 0;
}
2、直接用父类的指针调用
#include <iostream>
using namespace std;
class Animal
{
public:
int m_age;
virtual void speak()
{
cout << "Animal::speak() " << endl;
}
virtual void run()
{
cout << "Animal::run() " << endl;
}
};
class Cat :public Animal
{
public:
int m_life;
//重写
void speak()
{
cout << "Cat::speak() " << endl;
}
void run()
{
cout << "Cat::run() " << endl;
}
};
int main()
{
Animal* p = new Cat();
//这样访问不行
//p->m_life = 10;
p->speak();
//这样就会调用到父类的speak();
p->Animal::speak();
p->run();
getchar();
return 0;
}
注意:父类指针指向子类对象时(也就是多态);父类的析构函数必须为虚函数(virtual)才行,这样对象消亡时才会调用子类的析构函数,否则只会调用父类的:
注 :构造函数不能写成虚函数,会报错!
#include <iostream>
using namespace std;
class Animal
{
public:
Animal()
{
cout << "Animal::Animal() " << endl;
}
virtual ~Animal()
{
cout << "Animal::~Animal() " << endl;
}
};
class Cat :public Animal
{
public:
Cat()
{
cout << "Cat::Cat() " << endl;
}
~Cat()
{
cout << "Cat::~Cat() " << endl;
}
};
int main()
{
Animal* p = new Cat();
delete p;
getchar();
return 0;
}