C++ c++;代码:类或结构:难以理解
可能重复:C++ c++;代码:类或结构:难以理解,c++,C++,可能重复: 我正在查看某个人的头文件的结构,但看起来函数是这个结构的一部分。。。那么这是一门课,但是如何禁欲呢?还是使用 struct Recording { FLAG mode; unsigned short intervals; unsigned short saved_cycles; virtual void SavetoFile( FILE *file,
我正在查看某个人的头文件的结构,但看起来函数是这个结构的一部分。。。那么这是一门课,但是如何禁欲呢?还是使用
struct Recording
{
FLAG mode;
unsigned short intervals;
unsigned short saved_cycles;
virtual void SavetoFile( FILE *file,
bool Control,
PhaseData *__phaseData = NULL
);
virtual bool LoadfromFile( FILE *file,
bool Control,
PhaseData *__phaseData = NULL
);
};
< C++ >代码>类< /COD>和
class Base { /* .. */ };
class Foo : Base
{
int i;
};
struct Bar : Base
{
int i;
};
在上面的代码中,Foo
私下从Base
继承,而Bar
公开继承。类似地,Foo::i
是私有的,而Bar::i
是公共的。请注意,i
在这两种情况下的可见性与继承无关,即即使Foo
和Bar
没有从Base
继承,其可见性也是相同的
除了这些差异,你可以用一个方法做的任何事情,你也可以做其他的。
< P> > C++ >代码>类> <代码>和<代码>结构> <代码>是相同的,除了前者的默认访问说明符是“代码>私下< /代码>,而后者则是<代码>公共< /C>class Base { /* .. */ };
class Foo : Base
{
int i;
};
struct Bar : Base
{
int i;
};
在上面的代码中,Foo
私下从Base
继承,而Bar
公开继承。类似地,Foo::i
是私有的,而Bar::i
是公共的。请注意,i
在这两种情况下的可见性与继承无关,即即使Foo
和Bar
没有从Base
继承,其可见性也是相同的
<>除了这些差异之外,你可以用一个方法来做,也可以用另一个来做。 < p> C++中,<代码>类< /> >和<代码>结构> <代码>是默认的,<<代码>类< /C> >的变量和函数是私有的,而<<代码>结构> <代码>它们默认是公共的。在C++中,唯一的有意义的区别是:<代码>类<代码>和<代码>结构>代码>默认情况下,<<代码>类< /C> >的变量和函数是私有的,而<<代码>结构> <代码>默认情况下是公共的。p> 使用
class
关键字时,所有子对象(成员和基)默认为私有,使用struct
时默认为公有,并且两者都定义了类类型。使用class
关键字时,所有子对象(成员和基)默认为私有,使用struct
时默认为公有,两者都定义了类类型。结构的特点是:
默认情况下,所有成员都是公共成员。
默认情况下,继承是公共的,即如果结构继承自类或结构,则它是公共的
对于一个类,默认情况下,上述两项都是私有的,即如果您没有指定其他项
关于数据成员,这使得它与C兼容(结构只有数据成员),这意味着您也可以在C++中使用C结构。
有时,即使在C++中,结构仍然被使用,但是我自己的偏好通常是使用“类”这个词,除非我特别希望所有的数据成员都是公共的,这是在你把它们简单地组合在一起的时候发生的。 发布的代码可能会受益于私有数据成员,以及常量的正确性,并可能使虚拟方法变得抽象。还需要一个虚拟析构函数,因为它有虚拟方法
此外,除非您正在实现“系统”,否则您不应使用以两个下划线开头的标识符。这些功能包括: 默认情况下,所有成员都是公共成员。 默认情况下,继承是公共的,即如果结构继承自类或结构,则它是公共的 对于一个类,默认情况下,上述两项都是私有的,即如果您没有指定其他项
关于数据成员,这使得它与C兼容(结构只有数据成员),这意味着您也可以在C++中使用C结构。
有时,即使在C++中,结构仍然被使用,但是我自己的偏好通常是使用“类”这个词,除非我特别希望所有的数据成员都是公共的,这是在你把它们简单地组合在一起的时候发生的。 发布的代码可能会受益于私有数据成员,以及常量的正确性,并可能使虚拟方法变得抽象。还需要一个虚拟析构函数,因为它有虚拟方法
另外,你不应该使用标识符从两个下划线开始,除非你正在执行“系统”。< /P>一个结构是C++中的一个类——只是使用它和其他类一样。@ jdl:你是问这是一个类还是结构,还是你的问题“如何去弃权?还是使用?”你的意思是什么?这是什么意思?结构是C++中的一个类,只是像其他类一样使用它。@你问这是一个类还是结构,或者你的问题是“如何去弃权?还是用?”如果是后者,你是什么意思?这是什么意思?他们过去是非常不同的,但是随着时间的推移,它们变得几乎相同了。(关于C struct的)比我的简明版本更好的答案:)@Flyphe我不知道有任何这样的区别existed@FlypheC++中的<代码>结构>代码>与C中的<代码>结构> /代码>不一样,但是C++中的
兼容。感谢您澄清这一点:它们过去确实非常不同,但随着时间的推移,它们变得几乎相同了吗?(关于C struct的)比我的简明版本更好的答案:)@Flyphe我不知道有任何这样的区别existed@FlypheC++中的<代码>结构>代码>与C中的<代码>结构> /代码>不一样,但是C++中的<代码>结构> <代码>,即POD(普通的旧数据,没有函数/ struct