C++常见面试问题
-  构造函数和析构函数可以是虚函数嘛添加链接描述 
-  C++类内存分布,https://blog.csdn.net/bailang_zhizun/article/details/117124494 
定义一个空类,对该类求sizeof结果为1,因为在声明该类型的实例的时候,必须知道这个类在哪存在,否则无法使用这些实例。至于一个空类占多少内存,由编译器决定,vs中每个空类型的实例占用1字节的空间。
如果在该类型中添加一个构造函数和析构函数,再对其求sizeof还是1,因为你生命一个空类本身就存在默认构造函数和析构函数。
那如果把析构函数声明为虚函数,或者定义一个虚函数,发现再求sizeof变成了4!(在32位的机器上,如果是64位则是8)
原因是C++的编译器一旦发现一个类中有虚函数,就会为该类生成一个虚函数表,并在该类的每一个示实例中添加一个指向虚函数表的指针就是vptr。
类的成员变量和成员函数是分开存储的;
 只有 非静态成员变量 才属于类的对象上;
class Person{
public:
	int m_A;//非静态成员变量;属于类的对象上
	static int m_B;//静态成员变量,不属于类的对象上;(记得类内声明,类外初始化)。
	void func(){} //非静态成员函数;不属于类的对象上,//一份就行,//this指针。
	static void func2(){};静态成员函数,不属于类的对象上;
}
int Person::m_B=0;//类外初始化;
//使用Perosn 创建一个对象,其sizeof为4;
父类中所有非静态成员属性都会被子类继承下去,但是父类的私有属性会被编译器隐藏。子类不能访问而已,但是被继承了;
class Father(){
public :
 int m_a;
private:
	int m_b;
protected:
	int m_c;
};
class son :public Father(){
int m_d;
};
//创建一个子类对象,其sizeof为16=4*4;
类的继承关系和内存分布混合;没看太懂;添加链接描述
默认权限(struct-public, class-private)
是否可用于声明模板(struct不可以, class可以)
-  内联函数与宏定义的区别添加链接描述 
-  new 和 malloc 区别添加链接描述 
-  构造/析构函数顺序添加链接描述 
-  const 关键字的作用添加链接描述 
-  sizeof ,strlen 和\0 
 1、sizeof是一个关键字,而strlen是一个函数。
 2、sizeof求的是字节长度,而strlen求的是实际长度。
int a=1;
sizeof(a)//4
strlen(a)//1
sizeof求的是分配过来的长度,而strlen求的却是实际使用的长度。
  比如:char a[30]="abcd";
   sizeof(a)=30;而strlen(a)=4;
strlen求的长度是以’\0’结束的。
比如char a[30];strlen(a)的结果是不定的,而sizeof(a)=30;
 char a[30]={'a','b','c'};对于strlen来说也是不定的,而sizeof却是30.
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号