随笔分类 - C++翻译计划
翻译C++之父的个人主页进行学习
摘要:是的,但要小心。 它可能不会做你期望的。 在构造函数中, 虚拟调用机制被禁用,因为从派生覆盖 课程还没有发生。 对象是从基础向上构建的, “派生前的基础”。 考虑到 #include<string> #include<iostream> using namespace std; class B {
阅读全文
摘要:纯虚函数是指不必在基类中定义,但必须在派生类中被覆盖(override)的函数。通过新奇的“=0”语法可将虚函数声明为纯虚函数。例如: class Base { public: void f1(); // 不是虚函数 virtual void f2(); // 是虚函数,但不是纯虚函数 virtua
阅读全文
摘要:malloc() 是一个以数字(字节)作为参数的函数; 它返回一个 void* 指向单元化存储。 new 是一个运算符,它接受一个类型和(可选)该类型的一组初始值设定项 作为它的论点; 它返回一个指向其类型的(可选)初始化对象的指针。 当您要分配用户定义类型的对象时,差异最为明显 具有独特的初始化语
阅读全文
摘要:在C++中,NULL的定义是0,所以只是审美上的区别。 我更喜欢避免宏,所以我使用 0。 NULL 的另一个问题是人们有时会错误地认为它 不同于 0或不是整数。 在准标准代码中,NULL 有时被定义为 不合适的东西 因此必须避免。 现在这种情况不那么常见了。 如果一定要给空指针命名,就叫它nullp
阅读全文
摘要:这取决于您要实现的目标: 如果要更改传递的对象,请通过引用调用或使用指针; 例如 void f(X&); 或void f(X*); 如果你不想更改传递的对象并且它很大,则通过 const 引用调用; 例如 void f(const X&); 否则,按值调用; 例如void f(X); “大”是什么意
阅读全文
摘要:C++ 从 C 继承了指针,所以我不能在不导致严重的兼容性问题的情况下删除它们。 引用在很多方面都很有用,但我在 C++ 中引入它们的直接原因是为了支持运算符重载。 例如: void f1(const complex* x, const complex* y) // without referenc
阅读全文
摘要:因为很多类并不是设计来作为基类使用的, 虚函数仅在用作派生类对象接口的类中有意义(通常分配在堆上并通过指针或引用访问)。 那么我什么时候应该声明一个析构函数为虚拟的呢? 每当该类具有至少一个虚函数时。 拥有虚函数表明一个类是作为一个派生类的接口,如果是派生类的对象可以通过指向基类的指针销毁。 例如:
阅读全文