`
- 浏览:
16624222 次
- 性别:
- 来自:
济南
-
★ 关于函数成员指针1. 派生类的成员指针可以指向基类的相应成员;2. 基类的成员指针不一定可以指向派生类的相应成员; 1) 如果派生类覆写了基类的函数,不可以; 2) 如果派生类没有覆写基类的函数,可以; 3) 如果是派生类中新加的函数,不可以。原因:1. 派生类具有基类的所有成员;2. 1) 此时基类和派生类中的该函数声明一样,定义不一样;如果此时允许基类该函数的指针指向派生类的该函数,则在用基类指针调用该指针指向的函数时,调用的将是基类中的该函数,这就违背了用户的本义;因此不可以; 2) 此时基类和派生类中的该函数从声明到定义都一模一样; 3) 派生类中的该成员在基类中不存在。例子程序:######################## 不包括本行 #########################/**************************************************************************** 文件名:testMemberPointer.cpp* 描述:测试成员指针* 结论:1. 派生类的成员指针可以指向基类的相应成员;* 2. 基类的成员指针不一定可以指向派生类的相应成员;* 1) 如果派生类覆写了基类的函数,不可以;* 2) 如果派生类没有覆写基类的函数,可以;* 3) 如果是派生类中新加的函数,不可以。* 作者:Lin Xiaobin* 创建时间:2006-11-04***************************************************************************/#include <iostream>using std::cout;using std::endl;class Base{public: virtual void func() { cout << "base.func" << endl; } void f() { cout << "another base.func" << endl; }};class Derived : public Base{public: void func() { cout << "derived.func" << endl; }};int main(int argc, char *argv[]){ typedef void (Base::*PBMF)(); typedef void (Derived::*PDMF)(); typedef int Base::*PBMD; // 允许,虽然 Base 类里没有 int 数据成员 typedef int Derived::*PDMD; // 允许,虽然 Derived 类里也没有 int 数据成员 PBMD p; // 允许,虽然 Base 类里没有 int 数据成员 Base *bd = new Derived; // 可以 Base *b = new Base; // 可以 //Derived *db = new Base; // 错误,无法将类型 Derived* 转换为类型 Base*。 Derived *d = new Derived; //PBMF pbmf1 = &Derived::func; // 错误,派生类覆写了函数 func, // 无法将类型 void(Derived::*)() // 转换为类型 void(Base::*)()。 PBMF pbmf2 = &Base::func; // 可以 PBMF pbmf3 = &Base::f; // 可以 PBMF pbmf4 = &Derived::f; // 可以,派生类没有覆写函数 f PDMF pdmf1 = &Derived::func; // 可以 PDMF pdmf2 = &Base::func; // 也可以 (d->*pbmf2)(); // 可以,若为虚函数,调用 Derived::func,否则调用 Base:func (d->*pdmf1)(); // 可以,调用 Derived::func (d->*pdmf2)(); // 可以,若为虚函数,调用 Derived::func,否则调用 Base:func (b->*pbmf2)(); // 可以,调用 Base::func //(b->*pdmf1)(); // 错误,类型不兼容 //(b->*pdmf2)(); // 错误,类型不兼容 (bd->*pbmf2)(); // 可以,若为虚函数,调用 Derived::func,否则调用 Base:func //(bd->*pdmf1)(); // 错误,类型不兼容 //(bd->*pdmf2)(); // 错误,类型不兼容 return 0;}######################## 不包括本行 #########################★ 关于数据成员指针参考:http://www.zdnet.com.cn/developer/code/story/0,3800066897,39308240,00.htm
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
然而,当涉及到类的成员函数时,事情变得稍微复杂一些,因为类的成员函数通常包含一个隐含的参数——`this`指针,用于引用调用该成员函数的对象实例。这导致了类的成员函数指针与普通函数指针在声明和使用上存在显著...
C++中的成员函数指针是一种特殊的指针类型,它可以指向类的成员函数。在C++中,函数本身不是对象,因此不能直接赋值给普通指针。但是,成员函数指针允许我们存储对特定对象成员函数的引用,以便稍后调用。这种机制在...
在C++中,成员函数指针是一个强大的工具,尤其在事件驱动和多线程编程中,它可以用来作为回调函数的接口。成员函数指针能够直接指向类中的某个特定函数,使得我们可以在不知道具体函数名的情况下调用某个对象的成员...
1.普通函数指针指向普通函数 2.普通函数指向非静态成员函数 3. 类外部的 类函数指针 指向...4. 类外部的 类函数指针 指向成员函数 5. 类内部的 函数指针 指向成员函数 (类似于第2条) 6. 类内部的 函数指针 指向普通函数
声明类成员函数指针时,我们需要指定函数的返回类型、类域操作符(即`.`或`->`,取决于是否是成员指针)以及函数参数列表。对于静态成员函数,由于它们不与类的实例相关联,因此没有`this`指针,静态成员函数指针...
关于强制转换,当你需要在类成员函数指针和一般函数指针之间进行转换时,这可能会变得复杂。在某些情况下,可能需要使用`reinterpret_cast`来进行这种转换,但这通常不推荐,因为这可能会导致二义性或运行时错误。在...
### 成员函数指针与高性能的C++委托 在C++中实现类似C#或Java等面向对象语言中的委托功能是一项挑战但也极具价值的技术实践。本文将深入探讨如何利用成员函数指针来创建高效的C++委托,并分析其背后的原理和技术...
### 通过函数指针调用C++非静态成员函数 在C++编程中,通过函数指针调用非静态成员函数是一种高级技巧,主要用于实现回调、动态绑定等场景。本文将详细探讨如何在Visual C++ 6.0 (VC6.0) 和Borland C++ Builder 6.0...
成员函数指针是C++语言中的一个高级特性,它允许我们直接存储和传递类的成员函数,以便在适当的时候调用。在上述代码中,`CmdParaParser` 类的实例处理命令行参数,并且使用成员函数指针来解析特定参数。下面我们将...
2. **使用**:通过结构体指针,可以直接访问其成员变量。例如,配置GPIOA的第1脚为推挽输出模式: ```c GPIOx->CRL |= (0x0010 ); ``` #### 五、结构体指针的强制类型转换 在某些情况下,可能需要将一个指针...
指向类的静态成员的指针,通过指针访问类的静态数据成员
1. 结构体指针:可以声明指向结构体的指针,通过指针访问结构体成员,如`struct Student *ptr; ptr->name = "Tom";` 2. 指针作为结构体成员:结构体中可以包含指针成员,用于指向其他数据结构。 六、指针与数组 1. ...
### char*指针成员变量的重载 在C++中,重载运算符是一种非常有用的功能,它允许程序员根据自己的需求定义如何使用某些内置运算符(如+、-、*等)来操作自定义的数据类型。本文将详细介绍如何对一个包含`char*`指针...
本篇讨论的是如何利用C++的成员指针来实现类似Borland VCL组件的事件回调机制,特别是在类模板的帮助下,使这一机制更具通用性。 首先,我们需要理解成员指针的概念。成员指针是C++中的一种特殊类型,它能够指向类...
下面给出一个使用指向类成员指针的例子: #include class A { public: A(int i) { a=i; } int fun(int b) { return a*c+b; } int c; private: int a; }; void main() { A x(8); //定义类A的一个...
在C++编程语言中,成员访问运算符和指针到成员运算符是访问和操作对象成员的关键工具。本文将深入解析这两个概念,包括它们的语法、用法以及在实际编程中的应用。 成员访问运算符主要包括点号(.)和箭头(->)。...
- 如果基类有一个字符指针成员,派生类可以选择保留它,修改它,或者增加新的字符指针成员。 - 基类的字符指针在派生类中可能用于共享数据或表示与基类不同的特性。 3. **继承与字符指针** - 当基类包含一个字符...
### C#结构体指针的定义及使用详解 #### C#结构体指针的基本概念 在C#中,结构体是一种值类型的数据结构,用于封装一组相关的数据。与类不同,结构体不会自动进行垃圾回收,因此对于大量数据的操作效率较高。在...
通过以上的知识点,我们可以理解易语言源码中关于取类指针、方法指针的使用方式,以及它们如何与线程调用、方法调用等机制结合,实现程序的功能。学习这些概念和技巧,有助于开发者更好地理解和编写易语言的面向对象...
在C++编程中,类是面向对象...以上就是关于C++类含有指针成员的编程处理中的关键知识点。理解并掌握这些概念对于编写健壮、高效的C++代码至关重要。在实际编程中,应始终遵循最佳实践,确保程序的稳定性和可维护性。