virtual–>function

如果基类和派生类都定义了"相同名称的成员函数",那么通过对象指针调用成员函数时,到底调用哪个函数,要根据该指针的原始类型而定,而不是视指针实际所指的对象类型而定。
 如果用了虚函数,这些情况就不存在了。
虚函数的总结:
  1.如果想在派生类中重新定义一个成员函数,那么就应该在基类中把该函数设为"virtual"。
  2.以单一指令调用不同函数(这句话不好理解,下面会解释),这种性质就是"多态"。
  3.虚函数是C++语言的多态性质和动态绑定的关键。
  4.既然抽象类中的虚函数不打算被调用,我们就不应该定义它,应该把它设为纯虚函数(在函数声明后加上"=0"即可)。
  5.拥有纯虚函数的类叫做抽象类,不能产生出对象实例,但是可以拥有指向抽象类的指针,以便于操作抽象类的各个派生类。
  6.虚函数派生下去仍是虚函数,而且可以省略virtual关键词核心理念就是通过基类访问派生类定义的函数。

include



using namespace std;



class Person{

public:

Person(int x):age(x){cout<<"Person::"<<endl;}

~Person(){cout<<"~Person()"<<endl;}

int get(){return age;}

virtual void print(){ cout<<age<<endl;}

void show(){ cout<<age<<endl;}



private :

int age;

};

class Man:public Person{

public:

Man(int y,bool x):Person(y){male = x;cout<<"Man::"<<endl;}

~Man(){cout<<"~Man()"<<endl;}

bool get(){return male;}

void print(){if(male)

cout<<"This is a male!"<<endl;

else

cout<<"Not male!"<<endl;}

void show(){if(male)

cout<<"This is a male!"<<endl;

else

cout<<"Not male!"<<endl;}

private:

bool male;

};



int main(){

Person *p=new Man(10,true);

dynamic_cast(p)->show();

p->print();

p->show();

}
原文链接: https://www.cnblogs.com/zhangsf/archive/2012/11/02/2751193.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/67950

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午1:05
下一篇 2023年2月9日 下午1:06

相关推荐