没有实例化的对象依然看一调用方法
2015-04-09 21:29
302 查看
常常被告诫,没有实例化的对象不能调用其成员方法。真的对吗?答案肯定不是。
其实钻一钻编译运行机制的空子是可以到的。
你执行一下下面的代码看看,是不是输出了“help”
为什么呢?
让我们捋一捋代码编译的过程:
当类被编译的时候,函数的地址就已经确定了。这个函数地址是被所有的该类对象共享的。
每实例化一个类对象就会有一块对象地址被分配出来,由一个叫做this的指针指向这个类的数据部分。
当调用成员方法的时候直接就找到了函数的地址,而且这个函数中没有用到对象的数据,当然就不会由任何问题。
其实钻一钻编译运行机制的空子是可以到的。
你执行一下下面的代码看看,是不是输出了“help”
class MyClass{ public: int data; MyClass(){ } void print(){ cout<<"help"<<endl; } }; int main(int argc, const char * argv[]) { MyClass* temp; temp->print(); return 0; }
为什么呢?
让我们捋一捋代码编译的过程:
当类被编译的时候,函数的地址就已经确定了。这个函数地址是被所有的该类对象共享的。
每实例化一个类对象就会有一块对象地址被分配出来,由一个叫做this的指针指向这个类的数据部分。
当调用成员方法的时候直接就找到了函数的地址,而且这个函数中没有用到对象的数据,当然就不会由任何问题。
相关文章推荐
- 波哥学JAVA,定义类 声明属性 创建对象 实例化对象 对象调用属性或者方法
- Java中,如何调用“其他类的方法中生成的实例化的对象”的属性?
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 为什么不使用工厂模式,以new Class的方式实例化对象并调用方法不利于项目升级的维护
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 一个对象toString()方法如果没有被重写,那么默认调用它的父类Object的toString()方法,而Object的toString()方法是打印该对象的hashCode,一般hashCode就是此对象的内存地址
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- python同一对象的方法(或函数)没有权利调用该对象的其他方法(或函数)
- 实例化Transform对象与GameObject对象时调用方法时的区别
- 1、c#中可以有静态构造方法,而java中没有,例如在单例模式中c#可以直接在静态构造中实例化对象,而java不可以
- 关于用代码实例化对象与xib实例化文件调用方法的不同
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- new 一个没有定义构造方法的子类对象,会调用父类的默认构造方法
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 子类重载父类的方法,当父类实例化时调用此方法,而子类成员没有实例化,
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变