—-想了解C++面试常见问题整理汇总分享的全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>
C++面试常见问题整理汇总分享总结讲述了C++面试常见问题。分享给大家供大家参考,具体如下:
1. 继承方式
public 父类的访问级别不变
protected 父类的public成员在派生类编程protected,其余的不变
private 父类的所有成员变成private
#include <iostream> using namespace std; class base { public: void printa() { cout <<"base"<< endl; } protected: void printhello() { cout <<"helo"<< endl; } private: void printnohello() { cout <<"no hello"<< endl; } }; class derived : public base { public: void printb() { printhello(); } // void printc() { printnohello(); } //printnohello是父类的私有函数,不可访问 }; int main() { base a; a.printa(); //a.printhello(); //printhello是类derived的protected函数,不可访问。 }
2. sizeof 和 strlen 的区别
① sizeof 是一个操作符,strlen 是库函数。
② sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾为‘ 0‘的字符串作参数。
③ 编译器在编译时就计算出了sizeof 的结果。而strlen 函数必须在运行时才能计算出来。并且 sizeof计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。
④ 数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。
#include <iostream> #include <cstdlib> #include <cstring> using namespace std; int main() { int a[] = {1, 2, 3, 4, 5}; cout << sizeof(a) << endl; //20 // cout << strlen(a) << endl; char b[] = {'a', 'b'}; cout << strlen(b) << endl; //6 cout << sizeof(b) << endl; //2 }
3. C中的 malloc 和C++中的 new 有什么区别
new、delete 是操作符,可以重载,只能在 C++中使用。
malloc、free 是函数,可以覆盖,C、C++中都可以使用。
new 可以调用对象的构造函数,对应的 delete 调用相应的析构函数。
malloc 仅仅分配内存,free 仅仅回收内存,并不执行构造和析构函数
new、delete 返回的是某种数据类型指针,malloc、free 返回的是 void 指针。
注意:malloc 申请的内存空间要用 free 释放,而 new 申请的内存空间要用 delete 释放,不要混用。
因为两者实现的机理不同。
4.1. c/c++中static
要理解static,就必须要先理解另一个与之相对的关键字auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的。auto的含义是由程序自动控制变量的生存周期,通常指的就是变量在进入其作用域的时候被分配,离开其作用域的时候被释放;而static就是不auto,变量在程序初始化时被分配,直到程序退出前才被释放;也就是static是按照程序的生命周期来分配释放变量的,而不是变量自己的生命周期;所以,像这样的例子:
void func() { int a; static int b; }
每一次调用该函数,变量a都是新的,因为它是在进入函数体的时候被分配,退出函数体的时候被释放,所以多个线程调用该函数,都会拥有各自独立的变量a,因为它总是要被重新分配的;而变量b不管你是否使用该函数,在程序初始化时就被分配的了,或者在第一次执行到它的声明的时候分配(不同的编译器可能不同),所以多个线程调用该函数的时候,总是访问同一个变量b,这也是在多线程编程中必须注意的!
static的全部用法:
1.类的静态成员:
class A { private: static int s_value; };
在cpp中必须对它进行初始化:
int A::s_value = 0; // 注意,这里没有static的修饰!
类的静态成员是该类所有实例的共用成员,也就是在该类的范畴内是个全局变量,也可以理解为是一个名为A::s_value的全局变量,只不过它是带有类安全属性的;道理很简单,因为它是在程序初始化的时候分配的,所以只分配一次,所以就是共用的;
类的静态成员必须初始化,道理也是一样的,因为它是在程序初始化的时候分配的,所以必须有初始化,类中只是声明,在cpp中才是初始化,可以在初始化的代码上放个断点,在程序执行main的第一条语句之前就会先走到那;如果你的静态成员是个类,那么就会调用到它的构造函数;
2.类的静态函数:
class A { private: static void func(int value); };
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/487959.html