4.对于下面的类CA,sizeof(CA) = _B_:
A. 4 B. 8 C. 12 D. 16
class CA
{
public:
CA();
virtual ~CA(); //因为有虚函数,所以会有4个字节的虚表指针,虚表是用来存储该类及其父类的变量和成员函数的一张表
private:
int m_iTime; //成员变量4个字节
public:
int GetTime();
int SetTime(int iTime);
};
在C++语言中,每个有虚函数的类,编译器都会为它生成一个虚拟函数表(简称:虚表),表中的每一个元素都指向一个虚函数的地址。 此外,编译器当然也会为类加上一个成员函数,是一个指向该虚函数表的指针(常被称为vptr),每一个由此类别派生出来的类,都有这么一个vptr。
虚表的内容是依据类中的虚函数声明次序--填入函数指针。派生类别会继承基础类别的虚表(以及所有其他可以继承的成员),当我们在派生类中改写虚函数时,虚表就受了影响;表中的元素所指的函数地址将不再是基类的函数地址,而是派生类的函数地址。
多态的实现只有在将子类对象赋给父类的对象的指针或引用的时候才能实现。
C语言char字符数组,是个很幽默的话题,在定义char数组的时候
char str[]={'h','e','l','l','o'};
printf("%d\n",sizeof(str));
printf("%s\n",str);
这样打印的结果显示分配的内存就是五个字节,并没有自动添加/0结束字符,在用%s打印的时候会由于找不到结束字符而出现乱码。
但是如果在定义的时候指定字符数,如下:
char str[10]={'h','e','l','l','o'};
结果显示分配的字节空间是10个,并且有自动添加结束字符/0
再换一种方式定义:
char strr[]="hello";
printf("%s\n",strr);
printf("%d",sizeof(strr));
结果显示这样strr分配的空间是六个字节,自动添加结束字符
C语言里面虽然也有<string.h>头文件,但是并没有string数据类型,这个头文件只是为了方便处理char数组或指针类型的字符串而设立的。
在对文件进行操作的时候,注意在写文件路径的时候要把\改成\\这样避免转义字符,还有一种更好的方法那就是把\改成/(跟JAVA一样的,看来/这种处理方式在C/C++和Java里面差不多)
栈:顺序栈就用一个数组来存储数据元素,并用一个坐标位置来记录栈顶、一个整型来记录栈的大小
链式栈则用一个头节点的next指针来记录栈顶位置
队列:顺序队列也是用数组来记录数据,并用两个整形用来记录队列的头和尾,注意:一个容量为N的队列需要分配的内存空间是N+1,因为判断队列满的条件是(rear+1)%size==front用循环队列来避免假空的现象
队列的链式存储和栈的区别就是除了定义节点的格式以外还要重新定义一个结构体用来指向头结点和尾节点