请问对象的非虚函数地址在哪,用指针怎么调用?
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:
非虚成员函数,编译器,直接安排调用指令.没有多少技巧可言.