1.构造函数和析构函数
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "A";
}
A(int x)
{
cout << "A" << x;
}
~A()
{
cout << "~A";
}
};
class B: public A
{
public:
B()
{
cout << "B";
}
B(int x)
{
cout << "B" << x;
}
~B()
{
cout << "~B";
}
};
(1)定义子类对象时,会先调用父类的构造函数,再调用子类的构造函数。析构函数调用顺序和构造函数相反。
int main()
{
B tmp;
return 0;
}
输出结果
AB~B~A
(2)用带参数的构造函数定义子类对象时,会先调用父类的无参构造函数,再调用子类的带参数构函数。析构函数调用顺序和构造函数相反。
int main()
{
B tmp(1);
return 0;
}
输出结果
AB1~B~A
2.虚函数
若父类和子类定义同名虚函数,子类对象调用该虚函数时,只会调用子类的虚函数。
#include <iostream>
using namespace std;
class Base
{
public:
virtual void show()
{
cout << "base class" << endl;
}
};
class Subclass: public Base
{
public:
virtual void show()
{
cout << "base subclass" << endl;
}
};
int main()
{
Subclass tmp;
tmp.show();
return 0;
}
输出结果
base subclass