类内或类外的函数声明

2023-12-10

我是一名正在尝试学习 C++ 的 JAVA 开发人员,但我真的不知道标准函数声明的最佳实践是什么。

在课堂里:

class Clazz
{
 public:
    void Fun1()
    {
        //do something
    }
}

或者在外面:

class Clazz
{
public:
    void Fun1();
}

Clazz::Fun1(){
    // Do something
}

我有一种感觉,第二个可能不太可读......


C++ 是面向对象的,因为它支持软件开发的面向对象范例。

然而,与 Java 不同的是,C++ 并不强制您将函数定义分组到类中:声明函数的标准 C++ 方法是仅声明一个函数,而不包含任何类。

相反,如果您正在谈论方法声明/定义,那么标准方法是将声明放入包含文件中(通常命名为.h or .hpp)和单独的实现文件中的定义(通常命名为.cpp or .cxx)。我同意这确实有点烦人并且需要一些重复,但这就是语言的设计方式(主要概念是 C++ 编译一次完成一个单元:您需要正在编译的单元的 .cpp 和只是 .h编译代码使用的所有单元;换句话说,类的包含文件必须包含能够生成使用该类的代码所需的所有信息)。有很多关于此的细节,对编译速度、执行速度、二进制大小和二进制兼容性有不同的影响。

对于快速实验来说,任何事情都有效......但对于更大的项目,分离是实际需要的(即使在公共 .h 中保留一些实现细节可能是有意义的)。

注意:即使您了解 Java,C++ 也是一种完全不同的语言……并且它是一种不能仅通过实验来学习的语言。原因是它是一种相当复杂的语言,有很多不对称性和明显不合逻辑的选择,最重要的是,当你犯错误时,没有像 Java 那样的“运行时错误天使”来拯救你……而是有“未定义的行为守护进程”。

学习 C++ 的唯一合理方法是阅读......无论你多么聪明,你都无法猜测委员会的决定(实际上聪明有时甚至是一个问题,因为正确的答案是不合逻辑的,并且是历史的结果)遗产。)

只需选择一个好书除了实验之外,一两本并从头到尾地阅读它们。单独进行实验不会让您达到像样的 C++ 熟练程度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类内或类外的函数声明 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的

随机推荐

  • 为什么我们无法在 ASMX Web 服务中返回 List

    正如开发人员所知 我们无法返回List
  • FluentAssertions 应该在生产代码中使用吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我一直在使用 FluentAssertions 进行单元测试 并且想知道为什么只在该上下文中提到它 如果您通常编写带有防护的快速失败生产代码 则必须复制 FluentAssertions
  • 卡在“线程“main”中出现异常 java.util.NoSuchElementException”

    我编写了一个带有单独类的程序 但在用户输入三边后我不断收到相同的错误 主要代码是 package interactiveTriangleWithAClass public class InteractiveTriangleProgramCl
  • Rails Turbolinks 中断提交远程表单

    我在使用 Rails 4 Turbolinks 和远程表单时遇到了一个相当奇怪的问题 我有一个看起来像这样的表格 td td td td
  • 基本的laravel路由密码保护无需设置数据库?

    我正在寻找一个非常简单的域 example com demo 密码保护解决方案 用户名和密码存储为数组中的键值对 我知道这在生产中是不好的做法 但这只是对某人的快速演示 我目前拥有的代码非常简单 Route group prefix gt
  • iOS 初始化 UIWebView 清除导航历史记录

    我在 IB 上根据需要设置 uiWebviewSocial 并正常加载请求 但是 稍后我还需要初始化这个 uiwebview 以清除 goBack 历史记录 我正在使用另一个 uiwebview 对象来实现此目的 webViewBridge
  • 提高重复groupby操作的性能

    我有一个带有 MultiIndex 的 DataFrame 它基本上是一个二进制矩阵 day day01 day02 session session1 session2 session3 session1 session2 session3
  • 从不同的函数写入文件(python)

    是否可以从不同的函数 python 写入单个文件 from future import print function f open txt txt wb def f1 write to txt txt def f2 write to txt
  • 找到最长的重复字符串?

    我有一些 HTML CSS JavaScript 其中包含非常长的类 id 变量和函数名称以及其他反复使用的组合字符串 我可能可以重命名或重组其中的一些内容 并将文本切成两半 因此 我正在寻找一种简单的算法来报告文本中最长的重复字符串 理想
  • 如何在 Mako 模板中使用字典?

    每当我将复杂的数据结构传递给 Mako 时 就很难对其进行迭代 例如 我传递了列表的字典的字典 要在 Mako 中访问它 我必须执行以下操作 for item in dict1 dict2 list endfor 我想知道 Mako 是否有
  • 通过Python脚本查看Azure中虚拟机的故障和更新域

    有什么方法可以通过 python 脚本获取特定虚拟机的更新域和故障域 我不想使用 powershell 命令 gt http windowsitpro com azure view fault and update domains azur
  • Robolectric 访问数据库抛出错误

    我有一个测试创建一个尝试从数据库获取一些数据的活动 失败并出现 SQLiteException 17 40 40 528 DEBUG TestEventLogger android database sqlite SQLiteExcepti
  • Terraform 条件参数块

    我创建了一个模块来部署以下内容azurerm automation schedule资源 resource azurerm automation schedule example name var aaname resource group
  • 如何将结构数组传递给函数?

    我试图将一个结构数组传递给一个函数 该函数用数据填充它们 当我尝试编译代码时 我被告知有错误 In function main error expected expression before Robot t loading Profile
  • 在所有视图控制器中创建警报功能 - swift

    我正在尝试声明一个在我的应用程序中显示警报的函数 为了避免重复工作 我尝试对所有应用程序使用相同的功能 我尝试通过创建一个具有 showNotification 函数的类来做到这一点 但是当我创建该类的对象并调用该方法时 什么也没有发生 我
  • 帮助在 C# 中使用 CreateProcessWithLogonW

    我正在尝试在 Windows XP 上的 asp net C 中执行带有参数的控制台应用程序 我已经尝试过diagnostics Process 但我无法让它工作 所以我切换到CreateProcessWithLogonW 我使用了来自的代
  • 为什么Spring的FactoryBean getObject返回null?

    我想创造一个春天ConversionService与定制Converters 但是返回值ConversionServiceFactoryBean getObject is null 参见示例 Bean Autowired public Co
  • 在带有卡片的 RecyclerView 上添加搜索过滤器?

    我找到了过滤器的解决方案ListView and SearchView on RecyclerView分开 但我想把它们结合起来 有可能吗 是的 有可能你的RecyclerView Adapter可以实施Filterable 之后你必须覆盖
  • primefaces.org/ui 无法解析

    我是 JSF 和 PrimeFaces 的新手 也是 stackoverflow 的新手 并且遇到配置 部署问题 我正在使用 PrimeFaces 5 0 Tomcat 7 0 55 和 JSF 2 2 JSF 标签可以解析并工作 但 Pr
  • 类内或类外的函数声明

    我是一名正在尝试学习 C 的 JAVA 开发人员 但我真的不知道标准函数声明的最佳实践是什么 在课堂里 class Clazz public void Fun1 do something 或者在外面 class Clazz public v