深入学习C++——18~20类
深入学习C++——18~19类
18.类的基础认识
与C语言不同,C++支持面向对象编程,因为C语言没有类、对象这些概念。
类是对数据和功能组合在一起的一种方法。如果在游戏中需要一些代表角色的东西,就需要一堆变量。如果这时有两个人物,就要把同样的代码复制两份。这样一来代码会非常混乱且重复,难以维护。使用类可以简化,创建一个叫做player的类:
1 | class Player |
类的本质是一个类型,可以把他当成其他变量来创建。我们使用Player player;
创建一个新变量叫做player,类型为Player。由类这种类型构成的变量称为对象,新的对象变量称为实例。这一句所做的是实例化了一个Player对象。若需给变量赋值,使用player.
加变量名即可访问。
1 | int main() |
这时会报错error: 'int Player::x' is private within this context
,这是因为x实际上是私有成员。类中的内容有可见性这一说,默认情况下一个类中所有的东西都是私有的(private),意味着只有类中的函数才能访问这些变量。如果需要在类外访问这些变量,我们需要将其设为公有的(public):
1 | class Player |
此时如果需要写一个函数来操作x和y,需要使用引用传递,因为需要修改Player对象:
1 | void Move(Player& player, int xa, int ya) |
类实际上也可以包含函数,类内的函数称为方法。将move函数移动到类中,此时不需要传入player对象,因为已经在Player对象中了。所有的player.
也都不需要了,他们指的就是当前对象的变量。main函数中使用player.Move(1, -1);
来调用方法。
1 | class Player |
综上,类允许我们将变量分组到一个类型中,并为这些变量添加功能。类并没有为变量提供什么新功能,不能用一般代码完成的工作用类同样无法完成。类只是提高了我们维护代码的效率。
19.类与结构体的对比
结构体(struct)和类(class)基本上没有什么区别,只有一个关于可见度的小区别,class中默认为private,而struct中默认为public。除此之外没有任何区别,C++中存在结构体的原因是为了与C保持向后兼容性。
什么时候该用结构体?什么时候该用类?从定义上来看,如果你需要类内变量都是private的那就用class,反之用struct。不过从经验上来谈,如果只是想表示一堆数据,那就用结构体。如果需要大量功能且需要继承,那就用类。这只是个人见解,这两者只是在语义上有可见性的区别,没有严格的规定,如何使用全看个人编程风格。
1 | class MyClass |
类与结构体的初始化和赋值
变量的赋值和初始化是不一样的,初始化是在变量定义的时候完成的,是属于变量定义的一部分,赋值是在变量定义完成之后想改变变量值的时候所采取的操作。
下面拿结构体举例子:
初始化
如果结构体没有构造函数,可以用指定初始化
与顺序初始化
1 | //没有构造函数的结构体 |
C++的结构体也可以有构造函数,如果有构造函数则可以用构造函数初始化:
1 | //有构造函数的结构体 |
赋值
1 | //依次给每一个结构体成员变量进行赋值 |
类的内容又多又杂,将会持续更新