相关疑难解决方法(0)

1511
推荐指数
11
解决办法
72万
查看次数

C++中struct和class之间有什么区别?

这个问题已在C#/ .Net的背景下提出.

现在我想学习C++中结构和类之间的区别.请讨论技术差异以及在OO设计中选择其中一个的原因.

我将从一个明显的区别开始:

  • 如果您没有指定public:or private:,则结构的成员默认是公共的; 默认情况下,类的成员是私有的.

我确信在C++规范的模糊角落中还有其他差异.

c++ oop struct class c++-faq

427
推荐指数
11
解决办法
34万
查看次数

结合C++和C - #ifdef __cplusplus如何工作?

我正在开发一个包含大量遗留C代码的项目.我们已经开始用C++编写,目的是最终转换遗留代码.我对C和C++的交互方式有点困惑.我知道通过使用C++编译器包装C代码extern "C"不会破坏C代码的名称,但我不完全确定如何实现它.

因此,在每个C头文件的顶部(在包含警卫之后),我们有

#ifdef __cplusplus
extern "C" {
#endif
Run Code Online (Sandbox Code Playgroud)

在底部,我们写

#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)

在两者之间,我们拥有所有的includes,typedef和函数原型.我有几个问题,看看我是否理解正确:

  1. 如果我有一个C++文件A.hh,其中包含一个C头文件Bh,包含另一个C头文件Ch,这是如何工作的?我认为当编译器进入Bh时, __cplusplus将被定义,因此它将包装代码extern "C" (并且__cplusplus不会在此块内定义).因此,当它进入Ch时, __cplusplus将不会定义并且代码将不会被包装 extern "C".它是否正确?

  2. 包装一段代码有什么问题 extern "C" { extern "C" { .. } }吗?第二个会extern "C" 做什么?

  3. 我们不把这个包装器放在.c文件周围,只放在.h文件中.那么,如果函数没有原型会发生什么?编译器是否认为它是C++函数?

  4. 我们还使用了一些用C语言编写的第三方代码,并没有这种包装.每当我从该库中包含一个标题时,我就一直extern "C"在使用#include.这是处理这个问题的正确方法吗?

  5. 最后,这是一个好主意吗?还有什么我们应该做的吗?我们将在可预见的未来混合C和C++,我想确保我们覆盖所有基础.

c c++ c-preprocessor extern-c

293
推荐指数
4
解决办法
20万
查看次数

哪里C不是C++的子集?

我在很多书中读到C是C++的一个子集.

有些书说C是C++的一个子集,除了细节之外.

代码在C中编译但在C++中编译的情况有哪些?

c c++

111
推荐指数
9
解决办法
2万
查看次数

C++结构的函数

通常我们可以为C++结构定义一个变量,如

struct foo {
  int bar;
};
Run Code Online (Sandbox Code Playgroud)

我们还可以为结构定义函数吗?我们如何使用这些功能?

c++ struct function

75
推荐指数
2
解决办法
13万
查看次数

C++ struct可以有成员函数吗?

我对结构和类之间的区别感到非常困惑,因为我似乎看到它们用于几乎相同的东西.我搜索了差异,我看到的唯一答案是默认情况下结构体有公共成员,默认情况下类有私有成员.但是,我的讲师刚刚告诉我结构不能包含成员函数.但我在互联网上看到很多线程,其中人们在结构中包含成员函数,并且具体说这样做是可以的.

我的讲师似乎坚持认为结构定义不具备功能,所以发生了什么?我唯一能想到的是,编译器可能会将结构中的函数更改为其他内容,以便它们在技术上不包含函数......这些矛盾是否有明确的答案?

c++ struct class member-functions

40
推荐指数
3
解决办法
6万
查看次数

带有成员函数的C++结构与具有公共变量的类

这实际上是良好形式/最佳实践的问题.我在C++中使用结构来形成基本上保存数据的对象,而不是创建一个具有大量访问器方法的类,这些方法除了获取/设置值之外什么都不做.例如:

struct Person {
    std::string name;
    DateObject dob;
    (...)
};
Run Code Online (Sandbox Code Playgroud)

如果你想象那里有20个变量,把它写成一个有私人成员和40多个访问者的类是很难管理的,对我来说似乎很浪费.

有时候,我可能还需要为数据添加某种最小功能.在示例中,假设我有时也需要基于dob的年龄:

struct Person {
    std::string name;
    DateObject dob;
    (...)
    int age() {return calculated age from dob;}
}
Run Code Online (Sandbox Code Playgroud)

当然,对于任何复杂的功能,我都会创建一个类,但对于像这样的简单功能,这是"糟糕的设计"吗?如果我使用一个类,将数据变量保存为公共类成员是不好的形式,还是只需要接受它并使用一堆访问器方法创建类?我理解类和结构之间的差异,我只是询问最佳实践.

c++ struct class

26
推荐指数
2
解决办法
5万
查看次数