设为首页 加入收藏

TOP

C++多态与Java多态学习笔记
2014-11-23 19:15:53 来源: 作者: 【 】 浏览:39
Tags:Java 学习 笔记

Java对Override方法调用采取的是运行时绑定,也就是按照对象的实际类型来决定调用的方法,而不是按照对象的声明类型来决定调用方法,是一种向上转型。而Overload方法则想法是在编译时进行静态绑定的,按照声明类型决定调用的方法。这点C++也是一样的


class father
{
void f()
{
System.out.println("father::f");
}
}
public class Son extends father{
void f()
{
System.out.println("son::f");
}

public static void main(String[] argv)
{
father f = new Son();
f.f();
}
}


运行结果:son::f


C++支持两种多态性:a编译时多态性:通过重载函数实现,b运行时多态性:通过虚函数实现。


最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。如果没有使用虚函数的话,即没有利用C++多态性,则利用基类指针调用相应的函数的时候,将总被限制在基类函数本身,而无法调用到子类中被重写过的函数。


#include
using namespace std;
class B{
public:
virtual void f() const {cout<<"B::f";}
void k() {cout<<"B::k";}
};


class D : public B
{
public:
void f() const {cout<<"D::f";}//overrides
void k() const{cout<<"D::k";}
};


main(void)
{
B *ptr,b;
D d;
d.k();
ptr =new D;
ptr->f();
ptr->k();
b.f();
b.k();
}


运行结果:D::kD::fB::kB::fB::k


C语言梳理一下,分布在以下10个章节中:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Objective-C类的初始化 下一篇从C语言到C++语言

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: