所有的东西都在一个班里吗
Does everything go inside a class?
我还有一个基本问题。我记得我听说C++中的所有东西都在一个类中。然后我听说在可能的情况下不应该使用类。所以我的问题是:你什么时候上课,什么时候不上课?(一两个例子很酷)
还有一个随机的附带问题:什么时候把两个类放在一个头中合适?或者这有关系吗?
所有东西都在一个班里吗?
不,绝对不是。类是面向对象编程的一部分,但与Java或C#相比,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 }
}
写一次,随处使用。
最后一点,Scott Meyers的这篇文章是关于类设计以及何时使用自由函数和何时不使用自由函数的非常有趣的读物。
在C++中,所有东西都不需要进入类内(与Java相反,Java中所有东西都进入类内)。
-
当你想代表一些真实世界的实体时,比如人、客户、用户、动物、汽车等,你应该创建一个类。你需要存储一些关于实体的数据,并拥有一些与实体相关的功能。
例如:客户。您创建了一个客户类。客户需要存储以下数据。{姓名、年龄、地址、电话}。您需要一些函数,如addCustomer()、sendMessage()等
-
选择在哪里使用类,在哪里不使用类是一个严重的设计问题。没有一般规则。在你开始申请之前,你需要拿着纸和铅笔坐下来,头脑风暴你将需要的基本课程。你可以随时添加和微调你的设计在未来。在设计类时,最重要的是要记住代码的可重用性。还要尽量保持代码的松散耦合。
-
作为一种标准做法,每个头文件应该有一个类。
在C++中,没有必要将所有内容封装在一个类中。C++是一种多范式编程语言,这意味着你可以采用面向对象的方法,也可以采用过程性的(无类),或者两者之间的混合。
不过,一般来说,封装是一件好事,可以提高代码的可读性和可维护性。
一般来说,如果某个东西可以称为对象,那么它可以是一个类。一个类应该只对应于一个"真实的"对象。不超过一个对象,通常不是对象的一部分
示例-一个人、一把刷子、一本书、一个库、一个应用程序、一个进程、一个线程、一个Internet连接、一个GUI按钮、一个图形用户界面窗口。
在一个头中选择两个类取决于您正在使用的编码标准,或者那些强制执行的标准——为什么要为任何人编写代码。有些人可能没有。通常,当这两个类很小并且高度相关时,例如,从同一个基类或接口继承时,这是合适的。
请考虑阅读一本合适的面向对象和C++的书。
类基本上是一个对象的表示
该类将保存有关该对象的信息,通常还有更改该数据的方法。
C++中所有不在类中的东西都被称为static
代码,这意味着该方法不需要调用上下文
类的方法(类中的方法也可以是静态的,但我们现在忘记这一点)需要一个对象来调用它们
如果在类Example
中有一个静态方法foo(int, int)
和一个类方法bar(int, int)
boo的名称如下:
foo(3, 4);
而酒吧的名字是这样的:
示例obj;obj.bar(3,4);
面向对象编程(带类)有几个优点,目前大多数常用的语言都是面向对象编程。
类是称为"面向对象编程"的编程范式的一部分。
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)可以用于将事物组合在一起——这允许您创建"anologies"。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '