我有另一个基本问题。我有点回想起C ++中的所有内容都在课堂内。然后我听说不应该在可能的情况下使用课程。所以我的问题是:你什么时候上课,什么时候不上课? (一两个例子很酷)
一个随机的问题:何时将2个类放在一个标题中是否合适?或者重要吗?
答案 0 :(得分:10)
一切都在课堂上吗?
不,绝对不是。类是面向对象编程的一部分,但C ++不仅仅是Java,而是Java或C#。
C ++是一种多范式语言,这意味着它还允许其他东西。这是因为使用OOP时最大的缺点是算法的可重用性
当然,你可以为那里的每个班级编写某些功能,但是只写一次并永远完成它会有多酷?这就是STL的基础。 STL中的类(如vector
)仅具有绝对需要进行封装的成员函数。它们中的大多数都是独一无二的,比如从vector
检索第一个元素与检索list
的第一个元素不同。所有这些都由front
和back
等成员函数封装和抽象(用于直接访问成员),或begin
和end
(用于迭代器访问)。
现在,所有其他算法内容都是免费功能,只要它可以在多个类上运行,并且不需要直接访问该类的内部。以std::sort
为例。它适用于任何迭代器对,只要它们是随机访问迭代器即可。在STL中,那将是vector
和deque
,C ++ 0x我们得到array
,但在STL之外, 你的类 > 如果他们提供这样的迭代器。或者更突出的是,C风格阵列!是的,您可以非常轻松地使用它们进行排序:
#include <algorithm>
#include <iostream>
int main(){
int arr[5] = { 5, 2, 4, 1, 3 };
std::sort(&arr[0], &arr[0] + 5);
// arr == { 1, 2, 3, 4, 5 }
}
写一次,随处使用。
作为最后一点,this article by Scott Meyers是关于类设计的非常有趣的读物以及何时使用自由函数,何时不是。
答案 1 :(得分:2)
在C ++中,没有必要将所有内容封装在一个类中。 C ++是一种多范式编程语言,这意味着您既可以采用面向对象的方法,也可以采用程序化(无类),或者采用一些混合方式。
一般来说,封装是一件好事,可以提高代码的可读性和可维护性。
答案 2 :(得分:2)
在C ++中,一切都不需要进入一个类(而不是Java,一切都在一个类中)。
当你想要代表某个真实世界的实体时,你应该创建一个类,例如一个人,一个顾客,一个用户,一个动物,一个汽车等。你需要存储一些关于实体的数据并且有一些相关的功能到实体。
例如:客户。您创建了一个客户类。客户具有以下数据存储。 {姓名,年龄,地址,电话}。您需要一些函数,如addCustomer(),sendMessage()等。
选择在何处使用类以及何处不是严重的设计问题。没有一般规则。在开始申请之前,您需要坐下来用纸和笔,并集体讨论您需要的基本课程。您可以随时添加和微调您的设计。在设计课程时,要记住的最重要的事情是代码重用性。还要尽量保持代码松散耦合。
作为标准做法,每个头文件应该有一个类。
答案 3 :(得分:1)
非常一般,如果某个东西可以称为对象,它可以是一个类。一个类应该只对应一个“真实”对象。不超过一个对象,通常不是对象的一部分 示例 - 人员,画笔,书籍,库,应用程序,进程,线程,Internet连接,GUI按钮,GUI窗口。
一个标题中的两个类的选项取决于您正在使用的编码标准,或者为您编写代码时强制执行的编码标准。有些人没有。通常,当两个类非常小并且高度相关时,例如,从相同的基类或接口继承,这是合适的。
请考虑阅读适当的面向对象和C ++书籍。
答案 4 :(得分:0)
Classes是名为“Object Oriented Programming”的编程范例的一部分。
Person
是class
:
class Person {
public:
int age;
}
现在我们制作一些“对象”:
Person Alice;
Person Bob;
Person Charlie;
现在观看:
Alice.age = 5;
std::cout << "Alice's age: " << Alice.age << "\n";
Bob.age = 10 * Alice.age;
std::cout << "Bob's age: " << Bob.age << "\n";
输出:
Alice's age: 5
Bob's age: 50
如您所见,class
es(或struct
s)可用于将事物分组在一起 - 这样您就可以创建“anology”。
答案 5 :(得分:0)
一个类基本上是一个对象的表示 该类将保存有关该对象的信息,并且通常包含更改该数据的方法。
C ++中不在类中的所有内容都称为static
代码,这意味着该方法不需要调用上下文。
类中的方法(类中的方法也可以是静态的,但现在让我们忘掉它)需要一个对象来调用它们。
如果您在班级foo(int, int)
中有静态方法bar(int, int)
和班级方法Example
foo(3, 4);
虽然bar会像这样调用:
Example obj; obj.bar(3, 4);
面向对象编程(带有类)有几个优点,目前大多数常用语言都是OOP。