`
pleasetojava
  • 浏览: 729645 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

类里面的static和函数指针的特殊事项

阅读更多
  1. #include<iostream>
  2. usingnamespacestd;
  3. intprint(){
  4. cout<<"YYYYYYYYY\n";
  5. }
  6. classtt{
  7. public:
  8. staticint(*pp)();
  9. staticint*p;
  10. intv(){
  11. this->pp();//staticcanbeivokedbythis,but......
  12. }
  13. staticintvv(){
  14. //this->pp();No,onlystaticmemberorfunccanbeevoked!
  15. }
  16. };
  17. int(*tt::pp)()=print;//likethistoinitialise!
  18. int*tt::p=NULL;//must1.*2.tt::and3.p
  19. intmain(){
  20. tta;
  21. a.pp();
  22. (*tt::pp)();
  23. cout<<sizeof(tt)<<endl;//1
  24. }
  25. #include<iostream>
  26. usingnamespacestd;
  27. voidprint(){
  28. cout<<"asdf\n";
  29. }
  30. classtt{
  31. public:
  32. void(*p)();
  33. tt(){
  34. p=&(::print);
  35. }
  36. inta(){
  37. cout<<"aaaaafunction!\n";
  38. }
  39. };
  40. typedefint(tt::*MM)();
  41. intmain(){
  42. cout<<sizeof(tt)<<endl;//4not1,void*pinclassttisaval,notafunction!sosizeofis4
  43. tta;
  44. a.p();
  45. cout<<&tt::a<<endl;
  46. //cout<<(int)&a.a<<endl;
  47. MMmyf=&tt::a;
  48. (a.*myf)();//likethis
  49. }
  50. #include<iostream>
  51. usingnamespacestd;
  52. classtt{
  53. public:
  54. staticinta;
  55. };
  56. inttt::a=10;
  57. intmain(){
  58. cout<<sizeof(tt)<<endl;//1,static,nomatteritisconstorpointerorreference!saveinstaticsection,notclass
  59. //scope!
  60. cout<<tt::a<<endl;
  61. }
  62. #include<iostream>
  63. usingnamespacestd;
  64. classtt{
  65. public:
  66. doublea;
  67. charb;
  68. virtualint_a(){}
  69. virtualint_b(){}
  70. };
  71. intmain(){
  72. cout<<sizeof(tt)<<endl;//Linux16,Windows24,andvptrinthebeginningclass!
  73. //butalignofwindowsis8,becauseofthedouble,butalignoftheLinuxis4,evenif
  74. //uuse#pragmapack(8),thealignisstill4BYTE!
  75. }
  76. #include<iostream>
  77. usingnamespacestd;
  78. classT{
  79. public:
  80. charaa;
  81. doublei;
  82. virtualinta(){}
  83. };
  84. intmain(){
  85. //cout<<&(((T*)1)->aa)<<endl;//canuseitinWindows!LInux:can't
  86. //gettheaa'saddr,togetthatthevptris
  87. //atthebeginningortheendoftheclassortheclassobject!
  88. T*a=newT;
  89. cout<<(int)&(a->aa)<<endl;
  90. cout<<(int)a<<endl;

  91. cout<<sizeof(T)<<endl;
  92. deletea;
  93. }

其实,一些很变态的使用操作都在上面了,这里仅仅是一些很少用到的东西,注意拉!
分享到:
评论

相关推荐

    函数指针_extern_typedef_const_static的基本用法

    在C/C++编程语言中,`函数指针`、`extern`、`typedef`、`const`和`static`是五个非常重要的关键字,它们各自有着独特的功能和用途。本篇文章将详细阐述这些概念及其基本用法。 首先,我们来看`函数指针`。函数指针...

    指针函数和函数指针

    ### 指针函数 #### 1. 概念与定义 ...总结而言,指针函数和函数指针是C语言中非常重要的概念,它们提供了强大的工具来管理内存和控制程序的执行流程。掌握这些概念对于深入理解和应用C语言至关重要。

    指针函数与函数指针

    ### 指针函数与函数指针:深入解析与应用 ...通过上述解析,我们可以看到,指针函数和函数指针,以及指针的指针,虽然概念上各有侧重,但在C语言编程中均扮演着关键角色,对于高效、灵活的数据处理和函数调用至关重要。

    static变量和static函数的用法摘抄

    **二、static函数** 1. **静态内部函数(静态成员函数)**: 在C++中,函数也可以被声明为`static`,这通常发生在类的上下文中。静态成员函数没有`this`指针,不能访问类的非静态成员变量,但可以直接访问静态成员...

    C语言函数指针与指针函数训练.zip

    在C语言中,函数指针和指针函数是高级特性,它们在编程中扮演着重要角色,尤其是在处理回调函数、动态调度以及实现元编程等方面。本训练将深入讲解这两个概念,帮助你掌握其核心概念和实际应用。 首先,我们要了解...

    C++获取类的成员函数的函数指针详解及实例代码

    在C++编程语言中,获取类的成员函数的函数指针是一项重要的技术,它允许我们动态地调用对象的成员函数。下面将详细介绍这一概念,并通过实例代码进行解析。 首先,我们需要理解成员函数指针的概念。成员函数是类的...

    java和c++比较--虚函数和指针

    本文将基于“Java和C++比较--虚函数和指针”的主题,深入探讨两种语言在虚函数机制与指针使用上的差异,以及这些差异如何影响程序设计和性能。 ### 虚函数机制 #### C++中的虚函数 在C++中,虚函数是实现多态性的...

    C/C++ 函数指针教程

    函数指针可以极大地提高代码的可重用性和模块化程度,特别是在处理回调函数时更为明显。 #### 二、函数指针的基础 ##### 2.1 什么是函数指针? 函数指针是指向函数的指针。在C/C++中,函数也是一种数据类型,因此...

    C# 调用C++DLL(函数参数包含指针)

    总结来说,C#调用C++DLL并处理指针参数涉及到P/Invoke、函数原型声明、指针类型映射、内存管理和异常处理等多个环节。理解这些细节是成功进行跨语言互操作的关键。在实际开发中,务必确保所有操作都遵循安全规范,以...

    指向类的成员函数的指针如何使用(详解)..pdf

    在这个例子中,尽管`ip`被强制转换为`Baizhantang`类的成员函数指针,但因为`speak`是非虚函数,实际调用的仍然是`Person`的`speak`函数。 总结来说,C++中的指向类成员函数的指针提供了灵活的编程能力,允许在运行...

    C++规定与类同名的函数就是拷贝构造函数

    如命名空间(namespace)、类成员(Class members)、成员函数(Member Functions)、静态成员函数(Static Member Functions)、联合(Unions)、位字段(C++ Bit Fields)、嵌套类声明(Nested Class Declarations...

    C++将类的成员函数作为回调函数

    这在很多情况下是不方便的,尤其是在需要将函数作为回调注册到其他库或框架的情况下,这些库或框架通常希望提供一个简单的、不需要额外参数的函数指针。 #### 解决方案1: 使用单例模式 一种解决方案是在类内部定义...

    普通成员函数、类成员函数和类静态成员函数实例(VS2010)

    本实例主要探讨了三种类型的成员函数:普通成员函数、类成员函数和类静态成员函数。以下是对这三种函数类型的详细解释: 1. 普通成员函数(Non-static Member Functions): 普通成员函数是类的一部分,它们可以...

    深入理解C语言 static、extern与指针函数

    在C语言中,`static`、`extern`和指针函数是三个重要的概念,它们各自有着特定的作用和用途。 首先,我们来看`static`关键字。`static`用于修饰变量和函数,它可以改变变量的作用域和生命周期,以及函数的可见性。 ...

    指针与函数PPT课件.pptx

    本课件主要探讨了如何使用指针来操作和调用函数,包括指向函数的指针变量的定义、用指针调用函数以及将函数指针作为函数参数。 首先,指向函数的指针变量是一种特殊的指针,它存储的是函数的入口地址,而不是普通的...

    C代码之指针型函数(数据结构)

    这里我们有两个主要的知识点:指针型函数和字符串处理。 1. 指针型函数: 指针型函数是指函数的返回类型为指针,即函数执行完后会返回一个地址。在C语言中,我们可以将函数的返回值设为指针类型,这样可以使得函数...

    C++指针运指针与函数、数组

    - **函数指针**:可以定义一个指针变量来存储函数的地址,这样的指针被称为函数指针。 ```cpp void fun() { printf("Hello World!\n"); } void (*pf)(); // 函数指针声明 pf = fun; // 将fun函数的地址赋值...

    c 存储类 链接 内存管理 文件输入输出 结构类型,函数指针

    存储类主要有四种:自动(auto)、静态(static)、外部(extern)和寄存器(register)。自动变量在函数内部定义,只在该函数调用时存在;静态变量在整个程序执行期间都存在,作用域限于定义它的块;外部变量在程序...

    C++中static关键字总结

    由于静态成员函数没有this指针,它们相当于非成员函数指针。这样的特性使得静态成员函数成为一个可作为回调函数(callback function)使用的候选者,这在处理与C-based X Window系统相关的事件处理函数时尤其有用。...

Global site tag (gtag.js) - Google Analytics