C++ class notes(一)

类是抽象概念的实际应用。类将数据和对数据的操作整合到一起。

成员函数(方法)对类的数据进行操作。

类的声明描述了数据组成(数据成员),公共接口(方法)。类的定义则描述了特定的类成员函数是如何实现的。下面来看几个例子。

类作用域的常量

有三种实现方法。

enum类型,可以不加标签。

const static int,能够在声明部分初始化的变量。

static,类内声明,类外初始化。初始化不能在.h文件,需要放到一个.cpp文件中。

特殊的成员函数

当创建一个类后,类一定会有六个成员函数,即使用户不提供定义。

一个构造函数,一个析构函数,一个copy constructor,一个 opearator=, 以及一个 operator&。

构造函数用于初始化对象的成员变量,析构函数作用于对象要释放时,释放内存。

copy constructor用于将一个对象的数据变量赋值给另一个对象,常应用于传递值的情况。

operator= 函数和copy constructor的作用类似。它们需要额外注意。当我们未提供特定的copy constructor, operator= 函数时,程序默认提供的这两个函数进行memberwise copying,即逐个数据成员变量的copy。copy方式为 shallow copying,也叫浅拷贝,即拷贝值。但当我们的private成员中有指针,并用new申请初始化private中的指针变量。如果我们将这样一个对象A浅拷贝给另一个对象B,那么当对象结束时,析构函数会释放一个地址两次。——这是不允许的。会引发错误。

为此,当我们的数据成员中有指针时,我们需要自己写 operator=,copy constructor,实现deep copying,使两个对象中的指针变量指向各自的地址,两个地址存储着相同的内容。(char* 的话可以通过 strcpy()函数或者 string类实现),其他类型的指针可以对数组中的数值逐个复制。一个for循环搞定。

当然,我们还有转换函数。将对象转换为基本数据类型, built-in type, 或者将 built-in type转换为对象,这个部分留到下篇文章讲。

static 修饰符在类中浅讲

静态变量是C++变量中特殊的一部分。它存储于静态存储区,一个类能够有多个对象,多个对象有多份相互独立的数据,但它们共享同一份静态变量。private中的静态变量仅能被static 成员函数访问、修改。

在C++中,非静态变量不能在类的外边定义,但静态变量必须在类外定义。因为类的声明描述了类的组织结构,它应该有数据的类型和个数,但声明并没有实际申请内存,所以此时为类内数据赋值是不正确的。此外,静态变量应该在method file中定义,而不是head file, 因为head file可能会被包含到多个.cpp文件中,这会造成一种错误。

此处讨论的情况并未涉及const。若是加上了修饰符 const, 情况复杂,需要分类讨论。笔者目前仅记住了结论,此处放上参考链接。

(25 封私信 / 80 条消息) C++ 中 static 成员变量为什么不能类内初始化? - 知乎 (zhihu.com)

总结

以上便是关于类的粗略的笔记,后续计划陆陆续续完善自己的笔记,记录自己学习中遇到的问题。

  • 31
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值