这个问题已在C#/ .Net的背景下提出.
现在我想学习C++中结构和类之间的区别.请讨论技术差异以及在OO设计中选择其中一个的原因.
我将从一个明显的区别开始:
public:
or private:
,则结构的成员默认是公共的; 默认情况下,类的成员是私有的.我确信在C++规范的模糊角落中还有其他差异.
MSDN说你应该在需要轻量级对象时使用结构.当结构比类更可取时,还有其他任何情况吗?
有些人可能忘记了:
我理解结构和类之间的技术差异,我只是对使用结构时没有很好的感觉.
我经常与这个问题斗争,找不到任何明确的解决方案.我想我知道getter/setter的动机.
先前信息:
在实现真实数据时,通常将数据封装在多个层中.例如:
Run Code Online (Sandbox Code Playgroud)// 1st stage data types ------------------------------ struct Cartesian { int32_t x; int32_t y; int32_t z; } struct GeoLocation { double_t latitude; double_t longitude; int32_t altitude; } // 2nd stage data types ------------------------------ struct Drone { Cartesian baseOffset; // m Cartesian velocity; // m/s } struct Plane { GeoLocation location; // semicircle Cartesian velocity; // knots } // 3rd stage data types ------------------------------ struct Swarm { Plane base; Drone member[10]; }
在C++中,我使用类而不是结构(因为为什么不呢?).当Swarm[3].member[8].velocity.x
通过某个通信信道接收到有关数据时,就会出现问题.意识到系统中可以有多个群.
需求:
根据MISRA C++规则,函数不能将非const引用返回给任何类成员,因为如果没有该类的权限/知识,则不应更改该成员.
题: …
可能重复:
C++中struct和class之间有什么区别
如果结构和类之间的唯一区别是默认访问说明符(在C++中),那么为什么C++也有类?
在boost 属性树的文档中,有一个正确使用的示例,在此处或在包中给出 libs/property_tree/examples/debug_settings.cpp
.
我想知道的是关于这struct debug_settings
条线.为什么要把它作为结构而不是类?它甚至有两个成员函数,load(...)
和save(...)
.我认为提升作者有充分的理由这样做,并且它与...效率有某种关系,即使结构和类在"技术上"相同?
从列出的版权年份,我可以猜测这可能是C++ 98,C++ 03或C++ 0x,因此使用结构而不是类的原因至少来自于前C++ 11观点.
// ----------------------------------------------------------------------------
// Copyright (C) 2002-2006 Marcin Kalicinski
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// For more information, see www.boost.org
// ----------------------------------------------------------------------------
//[debug_settings_includes
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/foreach.hpp>
#include <string>
#include <set>
#include <exception>
#include <iostream>
namespace pt = …
Run Code Online (Sandbox Code Playgroud)