前言
和普通函数一样,类的成员函数也可以被重载,不仅在这个类里面可以被重载,你也可以在子类中重载它,并且保持父类的函数的可见性。正常情况下,如果你在子类中定义了相同名字的函数,那么你基于子类对象就只能调用子类它自己的那个函数,当然了,你也可以使用derive_obj.Base::func()
这种方式。不过你也可以在子类中用using
声明要重载的函数,使用重载。
代码1
#include<iostream>
using namespace std;
#include<string>
class Animal
{
public:
void bark(const string& animal_name) {
cout << "animal name: " << animal_name << endl;
}
void bark(int bark_num) {
cout << "animal bark num: " << bark_num << endl;
}
};
class Dog : public Animal
{
public:
using Animal::bark; // 声明要重载的函数
void bark(char dogc) {
cout << "dog c: " << dogc << endl;
}
};
int main()
{
Dog dog;
dog.bark("dog"); // 子类就可以使用父类的重载函数
return 0;
}
代码2
或者这样直接调用父类的函数。
#include<iostream>
using namespace std;
#include<string>
class Animal
{
public:
void bark(const string& animal_name) {
cout << "animal name: " << animal_name << endl;
}
void bark(int bark_num) {
cout << "animal bark num: " << bark_num << endl;
}
};
class Dog : public Animal
{
public:
// using Animal::bark;
void bark(char dogc) {
cout << "dog c: " << dogc << endl;
}
};
int main()
{
Dog dog;
dog.Animal::bark("dog");
return 0;
}