为什么C++
的 member function template
不能是virtual
的 ?
一个类的成员函数不能既是 template 又是 virtual 的
class Animal{
public:
template<typename T>
virtual void make_sound(){
//...
}
};
因为C++
的编译与链接模型是"分离"的 (至少是部分原因吧)。
- 从
Unix/C
开始,一个C/C++
程序就可以被分开编译,然后用一个linker
链接起来。这种模型有一个问题,就是各个编译单元可能对另一个编译单元一无所知。 - 一个
function template
最后到底会被instantiate
为多少个函数,要等整个程序(所有的编译单元)全部被编译完成才知道。 - 同时,
virtual function
的实现大多利用了一个"虚函数表"的东西,这种实现中,一个类的内存布局(或者说虚函数表的内存布局)需要在这个类编译完成的时候就被完全确定。
所以,由上面的矛盾可知,C++
的 member function
不能既是 template
又是 virtual
的。
reverse
一个字符串
手动循环还是使用系统库函数
是否返回一个新的字符串,或者只是返回原来的
是否支持Unicode
,UTF-8
C++ 和其他语言有什么不同
主观判断应聘者的答案
shared_ptr
内部实现,(是否是多线程安全的)
shared_ptr
本身是线程安全,但指向的对象操作不是线程安全
多线程中栈与堆是公有的还是私有的
栈私有, 堆公有
Hash 表的原理
处理关键字
key
冲突的办法 : 开放定址法, 链地址法
什么是拷贝构造函数(如何调用)
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:
- 通过使用另一个同类型的对象来初始化新创建的对象。
- 复制对象把它作为参数传递给函数。
- 复制对象,并从函数返回这个对象。
请问C++的类和C里面的struct有什么区别?
C++
中的类具有成员保护功能,并且具有继承,多态这类特点,而c
里的struct
没有
c里面的struct
没有成员函数,不能继承,派生等等.
什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?你通常采用哪些方法来避免和减少这类错误?
用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元即为内存泄露。
使用的时候要记得指针的长度。
malloc的时候得确定在那里free.
对指针赋值的时候应该注意被赋值指针需要不需要释放.
动态分配内存的指针最好不要再次赋值.
网友评论