zoukankan      html  css  js  c++  java
  • 没有被实例化的类 中的 非static成员函数竟然也可以被调用。。。前提是该成员函数没有用到成员变量

     1 #include <string>
     2 #include <iostream>
     3 using namespace std;
     4 #include "stdio.h"
     5 
     6 class A
     7 {
     8 public:
     9     string a;
    10     void f1(){printf("Hello World\n");}
    11     void f2(){a = "Hello World"; printf("%s",a.c_str());}
    12     virtual void f3(){printf("Hello World");}
    13     virtual void f4(){a = "Hello World";printf("%s",a.c_str());}
    14 
    15 public:
    16     static int m_i;
    17     static void f5(){cout << m_i << endl;}
    18 };
    19 int A::m_i = 5; //这句必须得要(如果调用了f5函数),否则会出现连接错误说f5中m_i符号找不到
    20 void main()
    21 {
    22     A* aptr = NULL;
    23     aptr->f1(); //这条代码尽然能够通过
    24     //aptr->f2();
    25     //aptr->f3();
    26     //aptr->f4();
    27     aptr->f5(); //这个能够被运行,这个很正常
    28 }

    在抽象类A中f1成员函数没有用到任何成员变量,因此空指向的A*指针调用f1函数能够编译连接并正常运行。

    对于f2成员函数用到了成员变量,也能够编译运行,但在运行中崩溃。

    对于f3成员函数,因为是虚函数,所以必须有对像,有了对象才有虚函数指针,有了虚函数指针才能够访问到虚函数,固NULL调用不到f3。

    对于f4成员函数,同上。

    对于f5静态成员函数,这个很正常了

  • 相关阅读:
    阿里的蚂蚁雄兵,已经俨然一个帝国
    Redmine数据库备份及搬家
    Redmine插件及使用
    高效代码审查的十个经验
    Redmine管理项目3-调整用户显示格式
    Redmine管理项目2-邮件通知
    Redmine管理项目1-自定义属性
    Excel VLOOKUP函数的使用方法
    一键安装Redmine
    Jdon框架开发指南
  • 原文地址:https://www.cnblogs.com/wnarutou/p/2730294.html
Copyright © 2011-2022 走看看