这个问题试图收集每年出版的数十本不良C++书籍中的少数珍珠.
与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C++,而无需学习编写精良的C++书籍.这样做太复杂了.事实上,它是如此庞大和复杂,有很多非常糟糕的C++书籍.我们并不是在谈论糟糕的风格,而是体育明显的事实错误和促进糟糕的编程风格.
请编辑接受的答案,以提供高质量的书籍和近似的技能水平 - 最好 在 C++聊天室讨论您的添加后.(如果他们不同意建议,常客可能会毫不留情地撤销你的工作.)添加一篇关于你亲自阅读/受益的每本书的简短描述/描述.随意讨论质量,标题等.符合标准的书籍将被添加到列表中.由C和C++用户协会(ACCU)撰写评论的图书都有指向评论的链接.
*注意:常见问题和其他资源可以在C++标签信息和c ++ - faq中找到.
对于C或C++中的许多新的,甚至是老的大学生来说,为什么指针会成为混乱的主要因素?是否有任何工具或思维过程可以帮助您理解指针在变量,函数和更高级别的工作方式?
有什么好的做法可以让人达到"啊哈,我明白了"的水平,而不会让他们陷入整体概念的困境?基本上,钻取方案.
我刚开始用指针,我有点困惑.我知道&一个变量的地址,它*可以在指针变量前面使用,以获取指针指向的对象的值.但是当您使用数组,字符串或使用变量的指针副本调用函数时,情况会有所不同.在所有这些内部很难看到逻辑模式.
什么时候应该使用&和*?
这是允许通过引用传递数组?
void foo(double& *bar)
Run Code Online (Sandbox Code Playgroud)
似乎我的编译器说没有.为什么?通过引用传递数组的正确方法是什么?还是一个解决方法?我有一个数组参数,我的方法应该修改,然后我应该检索.或者,我可以使这个数组成为一个类成员,它工作正常,但它对我的代码的其他部分有很多缺点(我想避免).
感谢致敬.
假设我有一个基类Animal与虚函数和一些派生类(Cat,Dog等).实际派生类包含4-8个字节的数据.我想存储一个std::list<Animal>实际上包含派生对象的项目.我想避免使用new在堆上创建许多小对象.
有没有可用于实现此目的的设计模式?
编辑:我的想法来实现这一点
std::deque<Cat>,std::deque<Dog>...; std::list<Animal*>包含指针的商店deques; 我使用的是std::deque因为我认为它具有良好的内存管理和大量的对象;只是想知道它是如何在不同的编译器和调试/发布配置中实现的.标准是否以某种方式提供有关其实施的建议?它在哪里有所不同?
我试图运行一个简单的程序,我已经从函数返回非const引用和指向局部变量的指针,但它的工作方式相同.那么内部引用只是一个指针是真的吗?
我刚从大学毕业,现在已经在C++工作了一段时间.我理解C++的所有基础知识并使用它们,但我很难掌握指针和类等更高级的主题.我已经阅读了一些书籍和教程,我理解其中的例子,但是当我看到一些高级的现实生活中的例子时,我无法弄明白.这让我很伤心,因为我觉得它让我无法将我的C++编程提升到一个新的水平.有没有人有这个问题?如果是这样,你是如何突破它的?有没有人知道任何真正描述指针和类概念的书籍或教程?或者使用高级指针和类技术的一些示例代码具有良好的描述性注释?任何帮助将不胜感激.
在C++中(我使用QT)我可以用两种方式创建QString类的实例:
QString str = "my string";
Run Code Online (Sandbox Code Playgroud)
QString *str = new QString("my string");
Run Code Online (Sandbox Code Playgroud)
我知道这与指针有关.所以我的问题是:
delete str;.str使用方法1时如何删除变量?谢谢
我很擅长使用C++.我以前处理过Java和ActionScript,但现在我想学习这种强大的语言.由于C++授予程序员显式使用指针的能力,因此我对使用箭头成员运算符感到困惑.这是我尝试编写的示例代码.
main.cpp中:
#include <iostream>
#include "Arrow.h"
using namespace std;
int main()
{
Arrow object;
Arrow *pter = &object;
object.printCrap(); //Using Dot Access
pter->printCrap(); //Using Arrow Member Operator
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Arrow.cpp
#include <iostream>
#include "Arrow.h"
using namespace std;
Arrow::Arrow()
{
}
void Arrow::printCrap(){
cout << "Steak!" << endl;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,它所做的只是使用两种方法(Dot和Arrow)打印牛排.
简而言之,在使用C++编写真正的实际应用程序时,何时使用箭头符号?由于我以前的编程经验,我习惯使用点符号,但箭头对我来说是全新的.