Questions tagged «c++»

有关C ++的问题,C ++是一种静态类型,自由格式,多范式,已编译的通用编程语言。

8
学习makefile有多重要?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我主要是在业余爱好中从事C ++工作(我还在上学,因此没有一份真正的工作)。IDE为我生成了makefile,所以我想知道是否值得学习如何自己制作它们。我的意思是“值得学习”,我应该在继续学习c ++之前放弃所有东西并学习如何编写它们吗?学习它们真的很有必要吗?如果是这样,我应该了解它们(常规语法和理解它们的工作原理等)还是真正学习如何编写它们?
12 java  learning  c++  syntax  make 

4
面向对象的编程:getter / setter或逻辑名
我目前正在考虑要编写的类的接口。此类包含字符的样式,例如,字符是否为粗体,斜体,带下划线等。我已经辩论了两天,是否应该将getter / setter或逻辑名用于将值更改为这些样式。尽管我倾向于使用逻辑名称,但这确实意味着编写的代码效率不高,逻辑也不如逻辑。让我举一个例子。 我有一类CharacterStyles具有成员变量bold,italic,underline(和其他一些人,但我会留下来,以保持它的简单)。允许程序其他部分访问这些变量的最简单方法是编写getter / setter方法,以便您可以执行styles.setBold(true)和styles.setItalic(false)。 但是我不喜欢这样。不仅是因为很多人说吸气剂/装料剂破坏了封装(真的那么糟糕吗?),而且主要是因为它对我而言似乎不合逻辑。我希望通过一种方法styles.format("bold", true)或类似方法来设置角色的样式,但不能通过所有这些方法来设置样式。 不过有一个问题。由于您无法通过C ++中的字符串内容访问对象成员变量,因此我要么必须为所有样式编写一个大的if语句/开关容器,要么必须将样式存储在关联数组中(地图)。 我不知道什么是最好的方法。我想我应该写吸气剂/设定器,下一刻我倾向于另一种方式。我的问题是:你会怎么做?为什么要这么做?

3
实现与C ++ 11的前向兼容性
我在大型软件应用程序上工作,该应用程序必须在多个平台上运行。其中一些平台支持C ++ 11的某些功能(例如MSVS 2010),而某些则不支持任何功能(例如GCC 4.3.x)。我希望这种情况会持续数年(我的最佳猜测:3-5年)。 鉴于此,我想设置一个兼容性接口,以便(尽可能)人们可以编写C ++ 11代码,而这些代码仍可以用较旧的编译器进行编译,而只需很少的维护。总体而言,目标是尽可能合理地最小化#ifdef,同时仍在支持它们的平台上启用基本的C ++ 11语法/功能,并在不支持它们的平台上提供仿真。 让我们从std :: move()开始。实现兼容性的最明显方法是将这样的内容放入公共头文件中: #if !defined(HAS_STD_MOVE) namespace std { // C++11 emulation template <typename T> inline T& move(T& v) { return v; } template <typename T> inline const T& move(const T& v) { return v; } } #endif // !defined(HAS_STD_MOVE) 人们可以这样写 …
12 c++  c++11 

7
编写代码后,为什么一段时间后我觉得“我会写得更好”?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我从事C ++的业余项目已有2年以上。每当我编写模块/函数时,我都会经过很多思考。现在看到问题了 do { --> write the code in module 'X' and test it --> ... forget for sometime ... --> revisit the same piece of code (due to some requirement) --> feel that "This isn't written nicely; could have been better" } while(true); 这'X'是任何模块(小/大/中)。我观察到,无论我在编码时付出了多少努力,这种情况都会发生。因此,大多数情况下,我不会看到有效的代码。:) 这是很多人的普遍感觉吗?这是语言的特定现象吗?(因为在C ++中,可以用不同的方式编写相同的东西)。 如果我对现实世界的生产代码有这种重构的感觉,该怎么办,在那儿更改工作代码不会赢得很多荣誉,但是如果失败,可能会带来麻烦。

3
类与结构
在C ++和其他受影响的语言中,有一个称为Structure(struct)的构造,另一个称为class。两者都能够容纳函数和变量。一些区别是: 类在堆中struct被分配了内存,在堆栈中被分配了内存(注意:这对于C ++是错误的,但是在OP所谓的“受影响的语言”中可能是正确的) 默认情况下,类变量是私有的,而struct它们是公共的 我的问题是:是否以struct某种方式放弃了上课?如果是这样,为什么?除了上述差异之外,a struct可以完成类所具有的所有相同功能。那么为什么要放弃呢?

12
为什么C ++经常是大学教授的第一门语言?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我的学校从C ++编程课程开始计算机科学课程,这意味着这是许多学生学习的第一门语言。 我已经看到很多人不喜欢C ++,并且我已经读过各种原因。C ++并不是一种很好的语言,这似乎几乎是一种流行的观点。根据StackExchange上的一些问题以及类似以下的帖子,我得到的印象是不太喜欢它: http : //damienkatz.net/2004/08/why-c-sucks.html http://blogs.kde.org/ node / 2298 http://blogs.cio.com/esther_schindler/linus_torvalds_why_c_sucks http://www.dacris.com/blog/2010/02/16/why-c-sucks-part-2/ 等。 (注意:我不认为C ++是一种不好的语言。实际上,它是我使用的主要语言。但是,互联网以及一些教授给我的印象是,它不是一种非常受欢迎的语言。实际上,我的一位教授不断使用C ++,但它仍然是我大学的入门语言!) 考虑到这一点,为什么这是许多学校教授的第一门语言?用C ++开始编程课程的原因是什么? 注意:这个问题类似于“ C ++是否适合作为第一语言”,但是有一点不同,因为我对是否合适并不感兴趣,但是为什么选择它。
12 c++ 

9
继承出错
我有一些代码,其中一个好的继承模型已经走下坡路,我试图理解为什么以及如何修复它。基本上,假设您有一个Zoo层次结构,其中: class Animal class Parrot : Animal class Elephant : Animal class Cow : Animal 等等 您有自己的eat(),run()等方法,一切都很好。有一天,有人来说-我们的CageBuilder类工作得很好,并使用了animal.weight()和animal.height(),但新的非洲野牛实在太强了,可以打碎墙壁,所以我要补充一下Animal类的另一个属性是isAfricanBizon(),并在选择材质时使用该属性,并且仅对AfricanBizon类覆盖它。下一个人来做类似的事情,下一件事您知道您具有所有特定于基类中层次结构子集的属性。 改善/重构此类代码的好方法是什么?这里的一种替代方法是只使用dynamic_casts来检查类型,但是这会使调用者混乱,并在整个位置添加一堆if-then-else。您可以在此处具有更多特定的接口,但是如果您仅有的话,那么基类引用也无济于事。还有其他建议吗?例子? 谢谢!

2
了解C ++中的回溯
我对C ++的基础知识有很好的基本了解,也对递归的工作方式也有了解。我遇到了一些问题,例如经典的八皇后问题和使用回溯法解决数独问题。 我意识到我对此一无所知,似乎无法回想起递归堆栈并重新开始以解决问题的想法。用笔和纸似乎很容易,但是在为此编写代码时,我对如何开始解决这些问题感到困惑。 如果有一个针对初学者的教程,或者有一本很好的书涵盖了这些内容,那将是很有帮助的。如果有人可以阐明这个话题或给我一些有关体面参考的链接,我将不胜感激。 是的,我确实知道使用功能语言会更容易,但是我也想了解命令式语言的实现。
12 c++  recursion 

9
避免从C移植到面向对象的陷阱,对您有用的是什么?
我已经使用过程语言进行编程已有一段时间了,我对问题的第一反应是开始将其分解为要执行的任务,而不是考虑存在的不同实体(对象)及其关系。 我在OOP上过一门大学课程,并且了解封装,数据抽象,多态性,模块化和继承的基础知识。 我阅读了/programming/2688910/learning-to-think-in-the-object-directional-way和/programming/1157847/learning-object-directional-thinking,并将查看这些答案中指出的一些书籍。 我认为我的一些中型到大型项目将受益于OOP的有效使用,但是作为一个新手,我想避免耗时的常见错误。 根据您的经验,这些陷阱是什么?解决这些陷阱的合理方法是什么?如果您能解释为什么它们是陷阱,以及您的建议如何有效解决该问题,将不胜感激。 我正在考虑类似“是否有大量观察者和修饰符方法并使用私有变量,或者是否有用于合并/简化它们的技术?”这样的思路。 如果有充分的理由混合使用方法,我不担心将C ++用作纯OO语言。(尽管有节制,但让人想起使用GOTO的原因。) 谢谢!

4
避免使用初始化方法
我有这个现有的代码,其中他们有一个类和该类中的初始化方法。预期一旦创建了类的对象,他们就需要在其上调用initialize。 初始化方法存在 的原因该对象要尽早创建以具有全局作用域,然后在加载依赖的dll之后再调用初始化方法。 具有初始化 的问题该类现在具有此bool isInitialized,需要在每个方法中进行检查,然后再继续进行,如果未初始化则返回错误。简而言之,这是一个很大的痛苦。 一种可能的解决方案 在构造函数中初始化。仅在全局范围内有一个指向该对象的指针。加载dll后创建实际对象。 上述解决方案的问题 任何创建此类的对象的人都必须知道,仅在dll被加载后才需要创建该对象,否则它将失败。 这可以接受吗?

4
在C ++中组织接口和实现的方法
我已经看到,在C ++中,关于头文件中的内容和cpp文件中的内容有几种不同的范例。AFAIK,大多数人,尤其是具有C背景的人会: foo.h class foo { private: int mem; int bar(); public: foo(); foo(const foo&); foo& operator=(foo); ~foo(); } foo.cpp #include foo.h foo::bar() { return mem; } foo::foo() { mem = 42; } foo::foo(const foo& f) { mem = f.mem; } foo::operator=(foo f) { mem = f.mem; } foo::~foo() {} …

12
C ++不适合OOP吗?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我在这里某个问题的答案之一(不记得是哪个)中读到C ++不适合面向对象的编程。有人提到您可以利用它的功能或类似功能,但不能纯粹从面向对象的角度来理解(我实际上并不真正了解此人的意思)。 这有什么道理吗?如果是这样,为什么?

2
是否可以嵌套静态库依赖项?
我在QT工作。 静态库可以依赖于另一个静态库吗?(静态Lib是通过链接另一个静态库创建的) 如果是,在链接到lib2之后,生成的lib(lib1)是否可能不包含lib2的所有代码吗? 在我的Qt项目中,我使用的是静态库,该库依赖于多个库。尽管我的代码中只需要一个库(以及该类的一个.h),但我必须添加所有库(及其项目中的所有标头)。 请说明情况。
12 c++  qt  static-linking 

2
可能以下划线开头的变量/成员会困扰编译器吗?
从高中开始我就被教导要定义如下变量: int _a; 要么 int __a; 应该将其视为不良做法,因为这最终会使使用下划线开头的变量来命名临时变量的编译器感到困惑。 据我所知,这就是有些人喜欢在名称末尾移动下划线的原因,例如: int a_; 但是,我看到很多代码都使用下划线开头的变量。而且该代码在Visual Studio 2010和g ++ 4.x中都可以很好地构建。 所以我想知道:这今天不是问题吗?现代编译器在命名约定方面更聪明吗?

8
将所有枚举包含在一个文件中并在多个类中使用它是一种不好的做法吗?
我是一个有抱负的游戏开发人员,我偶尔从事独立游戏的工作,有一段时间我一开始似乎做不好,但是我真的想从这里的一些经验丰富的程序员那里得到答案。 假设我有一个名为的文件enumList.h,其中声明了我想在游戏中使用的所有枚举: // enumList.h enum materials_t { WOOD, STONE, ETC }; enum entity_t { PLAYER, MONSTER }; enum map_t { 2D, 3D }; // and so on. // Tile.h #include "enumList.h" #include <vector> class tile { // stuff }; 主要思想是,我在1个文件中声明游戏中的所有枚举,然后在需要使用某个枚举时将其导入,而不是在需要使用的文件中声明该枚举。我这样做是因为它使事情变得干净,我可以在一个地方访问每个枚举,而不必只打开页面来访问一个枚举。 这是不好的做法吗?它会以任何方式影响性能吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.