Function 语意学
概述在前面文章《C++对象模型》可以知道,class 中成员函数的类型有:nonstatic member function、static member function、virtual member function;不同类型的成员函数的调用会有不同的表现,以下对每种类型的成员函数进行简单的分析。 nonstatic member functions为了使 nonstatic member function 能够与非成员函数具有相同的效力,C++ 编译器内部将 nonstatic member function 转换为非成员函数,转换的步骤以下:
例如: class example{
public:
void func();
};
/* 其中成员函数 func() 会被编译器内部转换为 void func(example *this)*/ Static member functionsStatic member function 和 nonstatic member function 1样会被编译器内部转换为非成员函数,区分是转换后不存在 this 指针,因此和全局函数1样,可以做 callback 函数。Static member function 有以下的特性:
virtual member function独立的 class在独立的 class 中 virtual member function 的调用有两种方式:指针调用 和 对象调用。例如: class A {
virtual void func();
};
A a;
A *pA;
a.func();
pA->func(); 用指针调用 单1继承的 class具有 virtual member function 的 class,编译器对其产生1个 vtable, 把指向虚函数地址的指针放在该表格中;继承含有 virtual member function 类的派生类具有以下的特性:
多重继承的 class像单继承1样,用基类的指针或援用只能访问基类中定义(或继承)的成员,不能访问派生类中引入的成员。当1个类继承于多个基类的时候,那些基类之间没有隐含的关系,不允许使用1个基类的指针访问其他基类的成员。 在多重继承的 virtual function 机制中,其复杂度围绕在第2个及后继的 base class 中,和在履行期间调剂 this 指针;1般规则经过指向第2或后继 base class 的指针或援用来调用 derived class virtual function。 虚继承的 class在虚继承下,对给定虚基类,不管该类在派生层次中作为虚基类出现多少次,只继承1个同享的基类子对象。同享的基类子对象称为虚基类。 指向成员函数的指针class A {
void func();
virtual void x();
}; 对非虚函数 Inline Function当我们在 class 中定义 inline function 时,编译器会根据函数的复杂程度决定是不是真正定义为 inline 类型,对不能真正定义为 inline function 的要求,编译器可能把它们处理为 static member function;真实的 inline function 的扩大操作是在调用的那1点上,这会带来参数的求值操作和临时性对象的管理; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |