为何众教材都不以此解释虚函数

C、C++和Java语言
回复
头像
自由建客
论坛版主
帖子: 13436
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64
来自: freebuilder@yeah.net
送出感谢: 12 次
接收感谢: 112 次
联系:

为何众教材都不以此解释虚函数

#1

帖子 自由建客 » 2010-12-01 14:21

代码: 全选

>0< urd$ cat main.cpp 
#include <iostream>

using namespace std;

class A
{
    public:
        virtual void f();
        void g();
};

void A::f()
{
    cout<<'A'<<endl;
}

void A::g()
{
    f();
}

class B :public A
{
    public:
        void f();
};

void B::f()
{
    cout<<'B'<<endl;
}

int main()
{
    A a;
    B b;
    a.g();
    b.g();

    return 0;
}

>0< urd$
1.png
这样多简单,而偏偏不用,非要去弄什么指针,把人绕得一头雾水。
头像
lerosua
论坛版主
帖子: 8455
注册时间: 2007-11-29 9:41
送出感谢: 0
接收感谢: 0
联系:

Re: 为何众教材都不以此解释虚函数

#2

帖子 lerosua » 2010-12-01 15:07

老朽愚钝,也不明白,楼主多说两句解释一下啊
头像
momova
帖子: 3382
注册时间: 2007-07-11 21:43
系统: archlinux
来自: 东江边
送出感谢: 15 次
接收感谢: 7 次

Re: 为何众教材都不以此解释虚函数

#3

帖子 momova » 2010-12-01 17:16

膜拜斗篷男
我来了,我看见了,我征服了!
求勾搭,不管饭。
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53
送出感谢: 3 次
接收感谢: 0

Re: 为何众教材都不以此解释虚函数

#4

帖子 风间星魂 » 2010-12-02 19:01

我本来以为搞懂了虚函数,看了楼主这么一解释又不懂了 :em20
头像
jialeadmin
帖子: 724
注册时间: 2008-06-17 23:17
来自: 灾区
送出感谢: 0
接收感谢: 0
联系:

Re: 为何众教材都不以此解释虚函数

#5

帖子 jialeadmin » 2010-12-10 14:23

基类调用派生类 派生类调用基类。。。呃
◆WINDOWS系统已彻底删除
◆正在安装UBUNTU 9.04
◆系统正在复制文件,请稍等...
┌────────────┐
│ ■■■■■■■□□□ 70% │
└────────────┘
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: 为何众教材都不以此解释虚函数

#6

帖子 BigSnake.NET » 2010-12-10 19:38

因为绕开指针讲虚函数是不行的。

你这个例子最终还是要解释为什么 A 的 g 会调用 B 的 f 。。最终还是得把指针搬出来。
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
tangboyun
帖子: 701
注册时间: 2009-07-25 1:57
送出感谢: 5 次
接收感谢: 13 次
联系:

Re: 为何众教材都不以此解释虚函数

#7

帖子 tangboyun » 2010-12-13 11:21

乱喷是没意义的,你看得什么鸟教材?教材是人看的么?

请翻阅《深度探索C++对象模型》没看过这本,谈毛虚汗数。

目录在这里,有兴趣自己去翻,这种好书没看过是很可惜的:

目录
前言(Stanley B.Lippman)
第0章 导读(译者的话)
第1章 关于对象(Object Lessons)
加上封装后的布局成本(Layout Costs for Adding Encapsulation)
1.1 C++模式模式(The C++ Object Model)
简单对象模型(A Simple Object Model)
表格驱动对象模型(A Table-driven Object Model)
C++对象模型(The C++ Object Model)
对象模型如何影响程序(How the Object Model Effects Programs)
1.2 关键词所带来的差异(A Keyword Distinction)
关键词的困扰
策略性正确的struct(The Politically Correct Struct)
1.3 对象的差异(An Object Distinction)
指针的类型(The Type of a Pointer)
加上多态之后(Adding Polymorphism)
第2章 构造函数语意学(The Semantics of constructors)
2.1 Default Constructor的建构操作
“带有Default Constructor”的Member Class Object
“带有Default Constructor”的Base Class
“带有一个Virual Function”的Class
“带有一个virual Base class”的Class
总结
2.2 Copy Constructor的建构操作
Default Memberwise Initialization
Bitwise Copy Semantics(位逐次拷贝)
不要Bitwise Copy Semantics!
重新设定的指针Virtual Table
处理Virtual Base Class Subobject
2.3 程序转换语意学(Program Transformation Semantics)
明确的初始化操作(Explicit Initialization)
参数的初始化(Argument Initialization)
返回值的初始化(Return Value Initialization)
在使用者层面做优化(Optimization at the user Level)
在编译器层面做优化(Optimization at the Compiler Level)
Copy Constructor:要还是不要?
摘要
2.4 成员们的初始化队伍(Member Initialization List)
第3章 Data语意学(The Semantics of Data)
3.1 Data Member的绑定(The Binding of a Data Member)
3.2 Data Member的布局(Data Member Layout)
3.3 Data Member的存取
Static Data Members
Nonstatic Data Member
3.4 “继承”与Data Member
只要继承不要多态(Inheritance without Polymorphism)
加上多态(Adding Polymorphism)
多重继承(Multiple Inheritance)
虚拟继承(Virtual Inheritance)
3.5 对象成员的效率(Object Member Efficiency)
3.6 指向Data Members的指针(Pointer to Data Members)
“指向Members的指针”的效率问题
第4章 Function语意学(The Semantics of Function)
4.1 Member的各种调用方式
Nonstatic Member Functions(非静态成员函数)
Virtual Member Functions(虚拟成员函数)
Static Member Functions(静态成员函数)
4.2 Virtual Member Functions(虚拟成员函数)
多重继承下的Virtual Functions
虚拟继承下的Virtual Functions
4.3 函数的效能
4.4 指向Member Functions的指针(Pointer-to-Member Functions)
支持“指向Virtual Member Functions”之指针
在多重继承之下,指向Member Functions的指针
“指向Member Functions之指针”的效率
4.5 Inline Functions
形式对数(Formal Arguments)
局部变量(Local Variables)
第5章 构造、解构、拷贝 语意学(Semantics of Construction,Destruction,and Copy)
纯虚拟函数的存在(Presence of a Pure Virtual Function)
虚拟规格的存在(Presence of a Virtual Specification)
虚拟规格中const的存在
重新考虑class的声明
5.1 无继承情况下的对象构造
抽象数据类型(Abstract Data Type)
为继承做准备
5.2 继承体系下的对象构造
虚拟继承(Virtual Inheritance)
初始化语意学(The Semantics of the vptr Initialization)
5.3 对象复制语意学(Object Copy Semantics)
5.4 对象的功能(Object Efficiency)
5.5 解构语意学(Semantics of Destruction)
第6章 执行期语意学(Runting Semantics)
6.1 对象的构造和解构(Object Construction and Destruction)
全局对象(Global Objects)
局部静态对象(Local Static Objects)
对象数组(Array of Objects)
Default Constructors和数组
6.2 new和delete运算符
针对数组的new语意
Placement Operator new的语意
6.3 临时性对象(Temporary Objects)
临时性对象的迷思(神话、传说)
第7章 站在对象模型的类端(On the Cusp of the Object Model)
7.1 Template
Template的“具现”行为(Template Instantiation)
Template的错误报告(Error Reporting within a Template)
Template中的名称决议方式(Name Resolution within a Template)
Member Function的具现行为(Member Function Instantiation)
7.2 异常处理(Exception Handling)
Exception Handling快速检阅
对Exception Handling的支持
7.3 执行期类型识别(Runtime Type Identification,RTTI)
Type-Safe Downcast(保证安全的向下转型操作)
Type-Safe Dynamic Cast(保证安全的动态转型)
References并不是Pointers
Typeid运算符
7.4 效率有了,弹性呢?
动态共享函数库(Dynamic Shared Libraries)
共享内存(Shared Memory)
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
回复

回到 “C/C++/Java”