网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

C++虚函数与非虚函数的区别。

#include 
#include 

/*
 * Animal 与Dog之间没有虚函数
 * Animal Fish有一个eating的虚函数
 *  通过"基类的指针" 访问 子类(们)的成员函数。这叫动态多态。是用虚函数的技术完成的。这也叫动态绑定。]
 *  当我们使用基类的引用(或指针)调用一个虚函数时将发生动态绑定(dynamic binding) 因为我们直到运行时才能知道到底调用了哪个版本的虚函数,可能是基类中的版本也可能是派生类中的版本,判断的依据是引用(或指针)所绑 定的对象的真实类型。
 *  与非虚函数在编译时绑定不同,虚函数是在运行时选择函数的版本,所以动态绑定也叫运行时绑定(run-time binding)。
 *
 * 虚函数的指针会保存到class里的"虚函数表"中。每一个对象都会一个自己的“虚函数表”。类似对函数指针列表。
 *
 * */
using namespace::std;

class Animal
{
public:
        string name;
        string attr;
        Animal(string n):name(n){};
        Animal(string n,string a):name(n),attr(a){};
        void runing(int i)
        {
                cout<<"animal("<moving,使用了animal里的 moving
 * */
void test_moving(class Animal *p)
{
        p->moving();
}
/*
 * eating在基类中是一个虚函数,所以test_eating的入参是animal类型,但在程序运行过程中 “动态地”找到真正的数据类型,并调用真正的方法函数。
 * 这也是多态的一种方式。
 *
 * */
void test_eating(class Animal* p)
{
        p->eating();
}

void test_eating_moving(class Animal& p)
{
        p.eating();//是虚函数,在运行时动态来决定。
        p.moving(); //moving不是虚函数,在编译时,决定了它是animal的moving
}
int main(void)
{
        class DOG dog("Dog bingo");
        class Animal a("Common-Animal");
        class Fish fish("Shark");
        dog.moving();
        a.moving();
        cout<<"dog is test_moving"<

文章名称:C++虚函数与非虚函数的区别。
浏览路径:http://bjjierui.cn/article/peigss.html