有人可以告诉我为什么在C ++中引入了确切的类。是否有一些类可以使用结构无法实现的功能?
答案 0 :(得分:1)
在这里阅读Stroustrup的解释:What is so great about classes?
一个类是代码中一个概念,一个概念的表示。类的对象表示代码中的想法的特定示例。如果没有类,代码的读者将不得不猜测数据项和函数之间的关系 - 类使这些关系明确并被编译器“理解”。对于类,程序的更多高级结构将反映在代码中,而不仅仅是在注释中。
精心设计的类为其用户提供了一个干净简单的界面,隐藏了其表示并使用户不必了解该表示。如果不应该隐藏表示 - 比如说,因为用户应该能够以他们喜欢的方式更改任何数据成员 - 你可以将该类视为“只是一个普通的旧数据结构”;例如:
struct Pair {
Pair(const string& n, const string& v) : name(n), value(v) { }
string name, value;
};
请注意,即使数据结构也可以受益于辅助功能,例如构造函数。
答案 1 :(得分:0)
实际上,C ++中的结构是类的一个特例,包含它是为了使C ++更向后兼容C。回想一下C中的结构是对可能不同类型的数据项集合的描述给出了一个名称。这也是其他语言中称为记录的时间。
在C ++中有一个基本的东西叫做 class ,它是一个可能不同类型的数据项的集合,以及对它们进行操作的函数。
在C中,结构允许您使用结构声明作为模式来定义一块内存。
在C ++中,类允许您使用类声明作为模式定义一块内存,并使其与在其上运行的函数相关联。
在C中,使用结构做事的常见模式是这样的:
struct T {
?* some declarations */
};
struct T * foo.
struct T * create_a_T(}{/* malloc memory */}
void init_a_T(struct T * t){/* set it up */}
void do_something_with_T(struct T * t, ?* more arguments*/){/* more good things */}
在C ++中,类方法的工作方式完全相同,除了,您不需要将struct T *
作为参数;这是自动处理。
除了之外,在C ++中,一个类允许你使类的某些元素“私有”或“受保护”,也就是说它们不能从类方法之外访问。这可以保护您免受各种编程错误的影响。
此外,在C ++中,您可以使用继承,这意味着您可以定义一个“类似于”现有类的新类,除了以添加代码其他数据声明或方法。这可以让你围绕一个名为“一种”的关系组织代码,所以,例如,你可以有一个类Car,并定义一个新类Mercedes,它是“一种”Car,但有特殊的Mercedes相关部分
所有这一切都伴随着“面向对象编程”的概念,这个概念在一个答案中无法解释,但是历史证明它可以更容易地正确地构建大型程序。
答案 2 :(得分:0)
class CL
{
int x;
};
struct ST
{
int x;
};
ST和CL的唯一区别是CL.x
为private
而ST.x
为public
。
最佳实践:当您使用关键字struct定义仅包含公共对象的小型数据结构时,请使用关键字class。
更新:
这是有效的 - > class A;
这是无效的 - > struct B; // error: forward declaration of struct B
答案 3 :(得分:-7)
C ++面向对象,对象由类构成,因此C ++只使用它