类中成员函数调用问题

来源:互联网 发布:惠普手机打印软件 编辑:程序博客网 时间:2024/05/23 15:04

虚函数执行时,跟指针类型没有关系;跟作用域和虚函数表(new出来的对象有关)有关系;

       如果有作用域,根据作用域执行(不会走虚函数表,直接到代码段找),与new的类型和指针类型没有关系;

       如果没有作用域关键词则根据虚函数表(与new对象有关)执行

非虚重写函数执行时:跟new出来的对象没有关系,跟作用域和指针类型有关系

      如果有作用域,则根据作用域调用(直接到代码段找);

      如果没有作用域关键词则根据指针类型调用,与new出来的对象类型无关;

父类和子类各自单独拥有的函数:只与函数指针类型有关;

#include<iostream>

class Father
{
public:
Father()
{
printf("father 构造!\n");
}
void show()
{
printf("FathterShow!\n");
}
virtual void virtualshow()
{
printf("father virtualshow!\n");
}
~Father()
{
printf("Father 析构!\n");
}
};
class Son :public Father
{
public:
Son()
{
printf("Son 构造!\n");
}
void show()
{
printf("SonShow!\n");
}
virtual void virtualshow()
{
printf("Son virtualshow!\n");
}
~Son()
{
printf("Son 析构!\n");
}

};

虚函数执行:如果有作用域关键字则执行的虚函数只与作用域有关,与new出来的对象类型没有关系,图1,new Father,但是由于Son::作用输出Son中的虚函数;

 

虚函数执行:

new 出来的是Father,则虚函数表中为Father类中的函数,调用父类中的虚函数;与指针类型无关;若new出来的是Son类型的则虚函数表中的为子类的中的函数,调用子类中函数

 

父子间非虚函数类成员重写:跟new出来的对象没有关系,跟作用域和指针类型有关系

 

父类和子类各自单独拥有的函数:只与函数指针类型有关;//不推荐定义父类的对象,去调用子类独有的函数!


1 0
原创粉丝点击