C++ 类成员函数扩张

<<Inside C++ Object Model>>

类成员函数函数的编译

非static 成员函数

1、改写函数的原型, 隐式安插入一个this(如果函数声明为const, 则安插入const this)

2、通过this访问类中 的非static、static成员函数和成员变量

3、将改写的函数重新写为外部函数extern

至此,所有调用该成员函数实际变成调用extern函数

virtual 成员函数

virtual成员函数在编译过程中会经历和非static成员函数一样的过程, 但是编译器会为该类生成一个vptr,vptr中保存virtual成员函数的地址(多态产生的原因之一, 之二是指针或者引用提供的间接调用)

static 成员函数:

static函数不是必须通过this访问, 其函数原型的修改不会添加this指针,即 static函数没有this指针

结论: 

1、static函数不能是const(volatile), const(volatile)本质是将this修改为const(volatile), 但是static没有this

2、static函数不能是virtual, virtual本质是通过this查找vptr,再通过vptr实现多态,但是static没有this,故无法实现多态

猜你喜欢

转载自www.cnblogs.com/UnderTheHood/p/9067745.html