-
加了 virtual关键字之后,变成虚函数,就调用了他的派生类的函数查看全部
-
类型转换查看全部
-
typeid(*obj).name(); //传进来的对象的类型名称 typeid(*obj) == typeid(Bird) //可以判断对象类型 Bird * bird = dinamic_cast<Bird *>(*obj); //<Bird *>说明 只能应用于指针、引用 的转换 //要转换的类型当中必须包含虚函数 //转换成功,返回子类地址,失败返回NULL查看全部
-
没有数据成员,仅有成员函数,成员函数又都是纯虚函数的类叫接口类查看全部
-
构造函数不能使虚函数查看全部
-
内联函数不能是虚函数查看全部
-
静态函数不能是虚函数查看全部
-
普通函数不能是虚函数查看全部
-
虚析构函数查看全部
-
什么是多态查看全部
-
在C++中多态的实现是通过虚函数表实现的查看全部
-
有虚函数时,对象中首先存虚函数表指针,再存数据成员地址,没有虚函数时,首先存的是数据成员的地址。 有虚函数时,先使用指针 p 指向对象,访问的虚函数表指针,(*p)取得的是虚函数表地址,再使 p++ 就指向了数据成员,(*p)就能取得数据成员的值。查看全部
-
对象的地址和虚函数表指针的区别:对象的地址是对象在内存中的第一个单元的地址,是对象在内存中的地址,而虚函数表指针是内存中对象的第一个单元存放的地址,这个地址值是虚函数表的地址。 当指针指向了对象的时候,就找到内存中存放对象的地址,然后就执行对象,由于对象第一个内存单元存放的是虚函数表指针,这个虚函数表指针指向虚函数表,于是就因此执行虚函数表。 本科最后一个例程中,p 指向 Shape 对象,这个对象只有一个标识符,用来标识这个对象的存在。对于 q 指向 Circle 对象,这个对象第一个位置存放的是数据成员的地址,q 指向这个地址,当取得这个地址的值 (*q) 时,就取得了其数据成员的值 100 。数据成员的地址就存放在对象的第一个内存单元。当一个指针 q 指向这个对象的时候,在执行对象的时候就执行对象的第一个内存单元,也就访问了这个成员函数,因而指针 q 指向对象的时候,取地址值 (*p)就取得了其成员函数的值。查看全部
-
1.对象大小:指类实例化对象时,数据成员占有内存空间的大小,不包括成员函数。没有任何数据成员的类理论上讲不占任何内存。<br> 2.对象地址:指通过一个类实例化一个对象时,对象占有一定的内存单元,这个对象占据的第一个单元的地址即是对象的地址<br> 3.对象成员地址:指当用一个类实例化一个对象时,这个对象可能有多个数据成员,由于数据成员的数据类型不同,那么占据的空间大小也就不同,这个类的每个成员都会占一定的空间,每个数据成员的地址也就是对象成员的地址不同<br> 4.虚函数表指针:指在有虚函数时,实例化一个对象时,这个对象的第一块内存中存放的是一个指针,是虚函数表的地址,大小为4。<br> 5.如果实例化对象没有数据成员,就会有一个内存单元来标记这个对象的存在,如果对象中有数据成员,就不用内存单元来标记这个对象的存在,这个对象的大小就是数据成员所占内存的大小。查看全部
-
TPYE ID 的用法查看全部
举报
0/150
提交
取消