今天参加了网易的一场面试,对面4个面试官。直接把我震慑住了。基础渣渣的我,瞬间虚了。记得有一个c++编程面试题,问我程序的输出结果。当时以为简单,没有看出坑点。后面自己在编译器上输出才发现了编译问题:
原题:
在这段代码中,有几个问题和概念上的混淆。
类型不匹配:
当你使用Base* ptr = new Derive[10];时,你实际上创建了一个Derive类型的数组,但是用Base*的指针去指向它。虽然这看起来是合法的,因为Derive是从Base派生出来的,但当你试图通过该指针访问数组元素时,你会遇到问题。ptr是一个指向Base的指针,而不是指向Derive数组的指针,因此你不能使用ptr[7]这样的语法。
修正:如果你想通过基类指针访问派生类对象,你应该逐个地创建派生类对象,或者创建一个指向基类的指针数组,并分别分配派生类对象给它们。
默认参数:
在派生类中重写一个带有默认参数的虚函数时,派生类函数将不会继承基类的默认参数。这意味着,当你调用Derive的print函数时,你必须提供一个参数,除非你在类定义中再次指定默认参数(但这会导致混淆和潜在的问题)。
资源泄漏:
使用new分配的内存应该在不再需要时被释放。在你的代码中,你创建了一个动态分配的数组,但在main函数的末尾没有释放它。这会导致资源泄漏。修正后的代码可能如下所示:
但请注意,使用裸指针和手动内存管理(如new和delete)在现代C++中通常不是首选。相反,考虑使用智能指针(如std::unique_ptr或std::shared_ptr)和容器(如std::vector)来自动管理内存和对象生命周期。 还是基础不牢啊。
大厂梦失败了,干一碗鸡汤。不然又得进入死循环的自我怀疑了。加油,乖乖的再看看基础书籍,不断提高自己的技能吧,菜鸡。。。