#include <iostream> #include <cstring> #include <string.h> #include <stdio.h> using namespace std; class parent { public: virtual void output(); virtual void aaa(); }; void parent::output() { cout<<"parent"; aaa(); } void parent::aaa() { cout<<"aaa"; } class son:public parent { public: virtual void output(); virtual void aaa(); }; void son::output() { cout<<"son"; aaa(); } void son::aaa() { cout<<"bbb"; } int main() { son s; //memset(&s,0,sizeof(s)); parent &p=s;//reference p.output(); cout<<endl; parent *q=&s;//pointer q->output(); return 0; }
输出
sonbbb sonbbb
构造父类引用或者指针,在运行时才决定调用哪一个子类还是本身的函数,当没有virtual时,调用自己 的函数。
当有virtual时调用子类的同名复写函数。。。。
附加题
一颗完全2叉树有699个节点,求叶子结点?
对于完全二叉树,根节点到上一层节点的所有结点是512个,因此最后一层叶子结点是187个;
对应予上一层的父节点有187/2+1=94个;
上一层的所有结点数为,256;
因此上一层剩余的结点数位256-94=162个。并且这些结点就是叶子结点。
因此叶子结点总数为187plus162=349个