重载发生在一个类里面或者同一个作用域中 (函数名相同,参数不同)
子类无法重载父类的函数,子类中的同名函数会覆盖父类的函数
重写包括虚函数重写和非虚函数重写(重定义)
虚函数重写就是基类和派生类中的虚函数的函数类型、函数名、函数参数类型完全一样;使用virtual关键字
重定义就是基类中的函数名和派生类中的函数名一样 //函数的返回类型和参数可以不一样;不使用virtual关键字
#include <iostream>
using namespace std;
class point {
public:
point(int a) { //构造函数的重载
this->a = a;
}
point(int a, int b) { //构造函数的重载
this->a = a;
this->b = b;
}
public:
virtual void print() { //虚函数重写
cout << "a=" << a << "b=" << b << endl;
}
void print1() { //重定义
cout << "point";
}
private:
int a;
int b;
};
class circle:public point {
public:
circle(int a,int b,int r):point(a,b) {
this->r = r;
}
public:
void print() { //虚函数重写
cout << "r=" << r << endl;
}
int print1() { //重定义
cout << "circle";
return 0;
}
private:
int r;
};
void display_obj(point *p) {
p->print();
}
int main() {
point p1(1, 2);
circle c1(1, 2, 3);
c1.print1();
display_obj(&p1);
display_obj(&c1);
system("pause");
}