C++函数的重载,C++的虚函数,多态性
下面关于虚函数和函数重载的叙述不正确的是()
A.虚函数不是类的成员函数
B.虚函数实现了C++的多态性
C.函数重载允许非成员函数,而虚函数则不行
D.函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定
-
C++的多态性:运行时多态性则是动态编联完成,主要通过虚函数来实现;编译时多态性通过静态编联完成,例如函数重载,运算符重载;
函数重载(overload)条件:函数的参数类型不同;函数的参数个数不同
函数重载的使用范围 :可以是类中的成员函数,也可以不是是类中成员函数
C++中的虚函数:
在基类的成员函数前加上virtual,然后在派生类中重写该函数,则在运行时程序会根据对象的实际类型来调用相应的成员函数。孙鑫老师书本上的例子如下
class animal
{
public:
virtual void breathe(){
cout<<"animal breathe";
}
};
class fish:public animal
{
public:
void breathe(){
cout<<"fish breathe";
}
};
void main(){
animal *pA;
fish pf;
pA=&pf;
pA->breathe();
}
C++类的内存结构 :
1.如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。
2.之后是类中的成员变量的内存数据。
C++类所占内存大小计算方式
【1】在类中,如果什么都没有,则类占用1个字节,
【2】如果只有成员函数,则还是只占用1个字节,因为类成员函数不占用空间
【3】一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,比如一个类只有一个int则占用4字节而不是5字节。
【4】虚函数因为存在一个虚函数表,需要4个字节,先找有没有virtual 有的话就要建立虚函数表,+4
【5】static的成员变量属于类域,不算入对象中 +0
【6】对齐法则