父类调用子类和虚构函数应用小结
2012-03-01 17:16
405 查看
代码一:
#include "iostream.h"
class Father{
public:
void eat(){
cout<<"父亲喜欢吃米饭"<<endl;
}
void smoking(){
cout<<"喜欢抽烟"<<endl;
}
private:
int weight;
int age;
};
class Son:public Father{
public:
void eat(){
cout<<"儿子喜欢吃粉"<<endl;
}
};
int main(){
Son s;
Son s;
s.eat();
return 0;
}
执行结果:
儿子喜欢吃粉
代码2:
执行结果:
父亲喜欢吃饭
输去结果会是下面
父亲爱吃米饭
Press any key to continue
为什么会这样呢!! 把一个子类地址传递给父类指针可以调用成功呢!
1.静态绑定和run-time(运行绑定)。
静态绑定:编译时绑定,通过对象调用
动态绑定:运行时绑定,通过地址实现,根据你给他对象的类型来确认。
下面这段代码调用就是通过下塑造型
虚函数实现动态绑定:
#include "iostream.h"
class Father{
public:
void eat(){
cout<<"父亲喜欢吃米饭"<<endl;
}
void smoking(){
cout<<"喜欢抽烟"<<endl;
}
private:
int weight;
int age;
};
class Son:public Father{
public:
void eat(){
cout<<"儿子喜欢吃粉"<<endl;
}
};
int main(){
Son s;
Son s;
s.eat();
return 0;
}
执行结果:
儿子喜欢吃粉
代码2:
#include "iostream.h" class Father{ public: void eat(){ cout<<"父亲喜欢吃米饭"<<endl; } void smoking(){ cout<<"喜欢抽烟"<<endl; } private: int weight; int age; }; class Son:public Father{ public: void eat(){ cout<<"儿子喜欢吃粉"<<endl; } }; int main(){ Son s; Father * pf; pf = &s; pf->eat(); return 0; }
执行结果:
父亲喜欢吃饭
输去结果会是下面
父亲爱吃米饭
Press any key to continue
为什么会这样呢!! 把一个子类地址传递给父类指针可以调用成功呢!
1.静态绑定和run-time(运行绑定)。
静态绑定:编译时绑定,通过对象调用
动态绑定:运行时绑定,通过地址实现,根据你给他对象的类型来确认。
下面这段代码调用就是通过下塑造型
int main(){ Son s; Father f; Son * pS; pS = (Son *)&f; pS->eat(); return 0; }
虚函数实现动态绑定:
相关文章推荐
- 当父类指针指向子类对象时的函数调用
- 关于如何在不使用虚函数的情况下父类调用子类成员函数的问题
- JS于,子类调用父类的函数
- JavaSE8基础 多态扩展性 父类引用作为函数参数,调用所装子类对象的重写方法
- 父类的正常成员函数子类可以使用,并不是继承下来 的,子类是怎么调用父类的函数 : 可能是利用了一种叫函数名联编的方法.没有隐藏的情况下用函数名字来决定调用的函数.
- 通过虚函数继承,父类调用子类中函数
- pb中父类动态调用子类的函数和事件方法
- <转载学习>子类对父类构造方法调用小结
- 在子类释放时,先释放子类资源,然后调用父类的释放函数释放父类资源
- java多个子类自动调用父类不包含的函数
- c++ 父类指针转换为子类指针后调用子类的成员函数问题
- Swift子类初始化函数中调用父类初始化函数的正确位置
- 匿名子类调用父类成员函数on_Previous();
- c++父类虚函数被子类虚函数覆盖后,如何直接调用父类的虚函数?
- 父类是抽象的类,子类实现了父类的抽象方法,在父类中应用到了抽象的方法,知道到底调用了那个子类。
- 域限定符解决子类中调用父类重名函数问题
- Swift子类初始化函数中调用父类初始化函数的正确位置
- java类继承中父类调用子类函数的问题
- 虚函数与非虚函数在父类、子类之间的调用
- 不知道子类成员函数的情况下,用父类方法调用子类的成员函数指针,需增加/vmg命令