一、 C++成员函数的重载
- (1) void func(int a);
- (2) virtual void func(int a);
- (3) void func(int a) const;
- (1)具有相同的作用域(即同一个类定义中);
- (2)函数名字相同
- (3)参数类型,顺序 或 数目不同(包括const参数和非const函数)
- (4)virtual关键字可有可无。
void func(int a) ==== void func(Base * this, int a)virtual func(int a) ==== virtual func(Base *this, int a)void func(int a)const === void func(const Base *this, int a) const
二 、C++成员函数的继承
using namespace
; class Base { public: void f(int a){
<<
<<
; } virtual void g(int a) {
<<
<<
; } }; class Derived : public Base { public: void h(int a) {
<<
<<
; } }; int main() { Base b; b.f(
); b.g(
); Derived d; d.f(
); d.g(
); d.h(
); }
using namespace
;class Base {public: void f(int a){
<<
<<
; } virtual void g(int a) {
<<
<<
; }};class Derived : public Base{public: void h(int a) {
<<
<<
; }};int main(){ Base b; b.f(
); b.g(
); Derived d; d.f(
); d.g(
); d.h(
);}



三、C++成员函数的覆盖
- (1)不同的作用域(非别位于派生类和基类中);
- (2)函数名称相同
- (3)参数列表完全相同;
- (4)基类函数必须是虚函数。
using namespace
; class Base { public: void f(int a){
<<
<<
; } virtual void g(int a) {
<<
<<
; } }; class Derived : public Base { public: void h(int a) {
<<
<<
; } virtual void g(int a) {
<<
<<
; } }; int main() { Base b; b.f(
); b.g(
); Derived d; d.f(
); d.g(
); d.h(
); }
using namespace
;class Base {public: void f(int a){
<<
<<
; } virtual void g(int a) {
<<
<<
; }};class Derived : public Base{public: void h(int a) {
<<
<<
; } virtual void g(int a) {
<<
<<
; }};int main(){ Base b; b.f(
); b.g(
); Derived d; d.f(
); d.g(
); d.h(
);}


四、C++成员函数的隐藏
using namespace
; class Base { public: virtual void f(float x) {
<<
<< x <<
; } void g(float x) {
<<
<< x <<
; } void h(float x) {
<<
<< x <<
; } }; class Derived : public Base{ public: virtual void f(float x) {
<<
<< x <<
; } void g(int x) {
<<
<< x <<
; } void h(float x) {
<<
<< x <<
; } }; int main(void) { Derived d; Base *pb = &d; Derived *pd = &d; pb->f(
); pd->f(
); pb->g(
); pd->g(
); pb->h(
); pd->h(
); }
using namespace
;class Base {public: virtual void f(float x) {
<<
<< x <<
; } void g(float x) {
<<
<< x <<
; } void h(float x) {
<<
<< x <<
; }};class Derived : public Base{public: virtual void f(float x) {
<<
<< x <<
; } void g(int x) {
<<
<< x <<
; } void h(float x) {
<<
<< x <<
; }};int main(void){ Derived d; Base *pb = &d; Derived *pd = &d; pb->f(
); pd->f(
); pb->g(
); pd->g(
); pb->h(
); pd->h(
);}

using namespace
; class Base { public: virtual void f(int a) {
<<
<<
; } void f(double d) {
<<
<<
; } }; class Derived : public Base { public: void f(double d) {
<<
<<
; } }; int main() { Derived d; d.f(
); d.f(
); Derived *pd = new Derived(); pd->f(
); pd->f(
); Base b; b.f(
); b.f(
); Base *pBase = new Derived(); pBase->f(
); pBase->f(
); }
using namespace
;class Base{public: virtual void f(int a) {
<<
<<
; } void f(double d) {
<<
<<
; }};class Derived : public Base{public: void f(double d) {
<<
<<
; }};int main(){ Derived d; d.f(
); d.f(
); Derived *pd = new Derived(); pd->f(
); pd->f(
); Base b; b.f(
); b.f(
); Base *pBase = new Derived(); pBase->f(
); pBase->f(
);}
Derived d; d.f(
); d.f(
); Derived *pd = new Derived(); pd->f(
); pd->f(
); Derived d;d.f(
);d.f(
);Derived *pd = new Derived();pd->f(
);pd->f(
);只要通过Derived对象或者Derived指针执行f()函数,都只执行void Derived::f(double d)该函数。[html]Base *pBase = new Derived(); pBase->f(
); pBase->f(
); Base *pBase = new Derived();pBase->f(
);pBase->f(
);

using namespace
; class Base { public: virtual void f(int a) {
<<
<<
; } void f(double d) {
<<
<<
; } }; class Derived : public Base { public: void f(int a) {
<<
<<
; } }; int main() { Derived d; d.f(
); d.f(
); Derived *pd = new Derived(); pd->f(
); pd->f(
); Base b; b.f(
); b.f(
); Base *pBase = new Derived(); pBase->f(
); pBase->f(
); }
using namespace
;class Base{public: virtual void f(int a) {
<<
<<
; } void f(double d) {
<<
<<
; }};class Derived : public Base{public: void f(int a) {
<<
<<
; }};int main(){ Derived d; d.f(
); d.f(
); Derived *pd = new Derived(); pd->f(
); pd->f(
); Base b; b.f(
); b.f(
); Base *pBase = new Derived(); pBase->f(
); pBase->f(
);}
Derived d; d.f(
); d.f(
); Derived *pd = new Derived(); pd->f(
); pd->f(
); Derived d;d.f(
);d.f(
);Derived *pd = new Derived();pd->f(
);pd->f(
);
view plaincopyprint?Base *pBase = new Derived(); pBase->f(
); pBase->f(
); Base *pBase = new Derived();pBase->f(
);pBase->f(
);