为什么需要课而不是结构

时间:2012-06-14 19:31:40

标签: c++ oop

有人可以告诉我为什么在C ++中引入了确切的类。是否有一些类可以使用结构无法实现的功能?

4 个答案:

答案 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.xprivateST.xpublic

最佳实践:当您使用关键字struct定义仅包含公共对象的小型数据结构时,请使用关键字class。

更新:

这是有效的 - > class A;

这是无效的 - > struct B; // error: forward declaration of struct B

答案 3 :(得分:-7)

C ++面向对象,对象由类构成,因此C ++只使用它