C语言中如何将一个虚函数改写成长尾?
- 内容介绍
- 文章标签
- 相关推荐
本文共计526个文字,预计阅读时间需要3分钟。
%E2%80%9C%E5%BD%A2%E5%BC%8F%EF%BC%9Avirtual +%E5%87%BD%E6%95%B0%E7%B1%BB%E5%9E%8B +%E5%87%BD%E6%95%B0%E5%90%8D +(%EF%BC%88%E5%9C%A8%E6%B4%BE%E7%94%9F%E7%B1%BB%E5%92%8C%E5%9F%BA%E7%B1%BB%E9%87%8C%E9%83%BD%E8%A6%81%E5%86%99%EF%BC%89) +%E9%9D%99%E6%80%81%E6%88%90%E5%91%98%E5%87%BD%E6%95%B0%E4%B8%8D%E8%83%BD%E6%98%AF%E8%99%9A%E5%87%BD%E6%95%B0 + 1.%E9%80%9A%E8%BF%87%E6%8C%87%E9%92%88%E5%AE%9E%E7%8E%B0%E5%A4%9A%E6%80%81 +%E5%AF%B9%E4%BA%8E%E5%9F%BA%E7%B1%BB%E7%9A%84%E5%AF%B9%E8%B1%A1%EF%BC%9A%E8%B0%83%E7%94%A8%E5%9F%BA%E7%B1%BB%E7%9A%84%E8%99%9A%E5%87%BD%E6%95%B0 +%E5%AF%B9%E4%BA%8E%E6%B4%BE%E7%94%9F%E7%B1%BB%E7%9A%84%E5%AF%B9%E8%B1%A1%EF%BC%9A%E8%B0%83%E7%94%A8%E6%B4%BE%E7%94%9F%E7%B1%BB%E7%9A%84%E2%80%9C%E5%8F%98%E5%BD%A2%E2%80%9D%E2%80%9D%EF%BC%9B
形式:virtual 函数类型 函数名 ()(在派生类和基类里都要写)
静态成员函数不能是虚函数
1.通过指针实现多态
对于基类的对象:调用基类的虚函数
对于派生类的对象:调用派生类的虚函数
#include <iostream>
using namespace std;
class A
{ public:
virtual void Print()
{ cout << "print A" << endl;
}
};
class B: public A
{ public:
virtual void Print()
{ cout << "print B" << endl;
}
};
class C: public A
{ public:
virtual void Print()
{ cout << "print C" << endl;
}
};
int main()
{ A a1;
A a2;
B b;
C c;
A *pa1 = &a1;
A *pa2 = &a2;
C *pc = &c;
pa1->Print();
pa1 = &b;
pa1->Print();
pa2 = pc;
pa2->Print();
return 0;
}
2.通过基类的引用实现多态
#include <iostream>
using namespace std;
class A
{ public:
virtual void Print()
{ cout << "print A" << endl;
}
};
class B: public A
{ public:
virtual void Print()
{ cout << "print B" << endl;
}
};
void in(A &r)//基类的引用
{ r.Print();//是谁的对象就调用谁的Print
}
int main()
{ A a;
B b;
in(a);
in(b);
return 0;
}
本文共计526个文字,预计阅读时间需要3分钟。
%E2%80%9C%E5%BD%A2%E5%BC%8F%EF%BC%9Avirtual +%E5%87%BD%E6%95%B0%E7%B1%BB%E5%9E%8B +%E5%87%BD%E6%95%B0%E5%90%8D +(%EF%BC%88%E5%9C%A8%E6%B4%BE%E7%94%9F%E7%B1%BB%E5%92%8C%E5%9F%BA%E7%B1%BB%E9%87%8C%E9%83%BD%E8%A6%81%E5%86%99%EF%BC%89) +%E9%9D%99%E6%80%81%E6%88%90%E5%91%98%E5%87%BD%E6%95%B0%E4%B8%8D%E8%83%BD%E6%98%AF%E8%99%9A%E5%87%BD%E6%95%B0 + 1.%E9%80%9A%E8%BF%87%E6%8C%87%E9%92%88%E5%AE%9E%E7%8E%B0%E5%A4%9A%E6%80%81 +%E5%AF%B9%E4%BA%8E%E5%9F%BA%E7%B1%BB%E7%9A%84%E5%AF%B9%E8%B1%A1%EF%BC%9A%E8%B0%83%E7%94%A8%E5%9F%BA%E7%B1%BB%E7%9A%84%E8%99%9A%E5%87%BD%E6%95%B0 +%E5%AF%B9%E4%BA%8E%E6%B4%BE%E7%94%9F%E7%B1%BB%E7%9A%84%E5%AF%B9%E8%B1%A1%EF%BC%9A%E8%B0%83%E7%94%A8%E6%B4%BE%E7%94%9F%E7%B1%BB%E7%9A%84%E2%80%9C%E5%8F%98%E5%BD%A2%E2%80%9D%E2%80%9D%EF%BC%9B
形式:virtual 函数类型 函数名 ()(在派生类和基类里都要写)
静态成员函数不能是虚函数
1.通过指针实现多态
对于基类的对象:调用基类的虚函数
对于派生类的对象:调用派生类的虚函数
#include <iostream>
using namespace std;
class A
{ public:
virtual void Print()
{ cout << "print A" << endl;
}
};
class B: public A
{ public:
virtual void Print()
{ cout << "print B" << endl;
}
};
class C: public A
{ public:
virtual void Print()
{ cout << "print C" << endl;
}
};
int main()
{ A a1;
A a2;
B b;
C c;
A *pa1 = &a1;
A *pa2 = &a2;
C *pc = &c;
pa1->Print();
pa1 = &b;
pa1->Print();
pa2 = pc;
pa2->Print();
return 0;
}
2.通过基类的引用实现多态
#include <iostream>
using namespace std;
class A
{ public:
virtual void Print()
{ cout << "print A" << endl;
}
};
class B: public A
{ public:
virtual void Print()
{ cout << "print B" << endl;
}
};
void in(A &r)//基类的引用
{ r.Print();//是谁的对象就调用谁的Print
}
int main()
{ A a;
B b;
in(a);
in(b);
return 0;
}

