我读到过关于类和结构体之间主要区别(除函数之外)的内容,即类成员默认为私有,而结构体成员默认为公有。
这意味着结构体成员可以是私有的。我的问题是:你能够拥有私有结构体成员吗?如果可以,使用私有成员的目的是什么?你又如何访问它们?
我读到过关于类和结构体之间主要区别(除函数之外)的内容,即类成员默认为私有,而结构体成员默认为公有。
这意味着结构体成员可以是私有的。我的问题是:你能够拥有私有结构体成员吗?如果可以,使用私有成员的目的是什么?你又如何访问它们?
结构体可以拥有私有成员,只需使用相应的访问修饰符即可。
struct Mystruct
{
private:
m_data;
};
结构体和类之间唯一的区别在于:
如何访问它们?
就像访问类的私有成员一样。即:它们只能在结构体的成员函数中访问,不能在派生结构体等中访问。
struct 和 class 之间唯一的区别在于默认访问权限(除了某些奇怪的模板情况,详见下面 Alf 的评论)。这意味着您可以像在类中一样访问私有成员:
struct foo {
int get_X() { return x; }
void set_X(int x_) { x = x_; }
private:
int x;
};
struct
还是 class
,都是纯粹的风格问题。如果所有成员都是公共的(例如,如果它是一个没有成员变量且只有公共函数的函数对象类),我倾向于使用 struct
。template< template< class Foo > class Bar >
。你无法使用 struct
写出这种形式。 :-) - Cheers and hth. - Alftypename
(这将是语法错误)。干杯! - Cheers and hth. - Alfstruct
,因为必须使用 class
或 typename
。你使用模板模板参数的示例实际上有点令人困惑。 - NeXuSclass
关键字必须使用的情况。 - Cheers and hth. - Alftemplate<template <typename Foo> class Bar> class MyClass;
是完全合法的。我只是想指出这一点。 - NeXuS使这种方法实用的一件事情是,在结构体中也可以使用friend关键字,因此私有成员只能被您想要修改它的特定函数、类或其他内容所使用和修改。这样,用户就无法自行修改这些部分。它们甚至不会出现在自动填充功能中,至少在Visual Studio中不会。