首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教对象的非虚函数地址在哪,用指针如何调用

2013-10-21 
请问对象的非虚函数地址在哪,用指针怎么调用?class Cpersons{public:int lenint maxCpersons(){max40l

请问对象的非虚函数地址在哪,用指针怎么调用?
class Cpersons{
public:
        int len;
int max;
Cpersons(){
max=40;
len=0;
p=new Cperson[40];
}
~Cpersons(){
delete[] p;
len=0;
max=0;
}
void out(){ cout<<"out"<<endl;}
}
Cpersons per;
然后直接用指针调用  out; 对象 指针 class
[解决办法]
Cpersons(){
max=40;
len=0;
p=new Cperson[40];

你这样搞还有尽头?
[解决办法]
上面打错了。是:

虚函数在物理上也是在编译是就确定地址,只是不同派生类,虚表的函数指针填充不同的值 
[解决办法]

引用:
上面打错了。是:

虚函数在物理上也是在编译是就确定地址,只是不同派生类,虚表的函数指针填充不同的值 

我指的是调用时...虚函数是间接调用的
[解决办法]
非虚函数不需要在对象内存中存储其地址
[解决办法]
相当于全局函数!   只不过参数有个this指针
[解决办法]
非虚成员函数地址,地址在代码里,和编译器的符号表里,编译器找到他们,

安排参数传递代码,包括传递隐藏参数 this 指针的代码,然后就是
一条call 指令.
调用对应的函数.

是直接安排调用代码,不需要额外的代码,来通过函数指针调用.
 汇编对应的指令大约如下:
#include<iostream>
using namespace std;
class A{
int x;
public:
    A():x(10){};
    void print(int n){cout<<"A::print n = "<<n<<", x = "<< x <<endl;};
}
a.print();
  //1)  push n
  //2)  lea ecx,a ;//this 指针。
  //3)  call A::print
  
PS:
非虚成员函数,编译器,直接安排调用指令.没有多少技巧可言.


热点排行
Bad Request.