C++学习笔记——类的初探

这一节,我将简单的介绍一下类的使用和一些该注意的地方。

在C++语言中,我们可以使用类来定义属于我们自己的数据类型,通过新的数据类型来反映待解决问题中的各种概念,可以使我们更容易编写,调试和修改程序。

类可以看成是现实世界中某种事物的抽象,数据类型如同事物的属性,成员函数如同是事物的行为,事物间的关系也可通过类来反映(继承,聚合)。

类的基本思想是 封装数据抽象 ,数据抽象是一种依赖于接口实现分离的编程方法,类的接口包括用户所能执行的操作;实现则包括类的数据成员和各种类所需要的函数。封装实现了类的接口和实现的分离,封装后的类隐藏了类的实现细节。

1.类的声明与定义

void FriendFun();

class MyClass{

public:

    Myclass() = default;

    MyClass(int a):idata(a){};

    ~MyClass();

    void FunctionConst() const;

    void Function();

protected:

    int idata;

private:

    char cdata;

    int te = 10;
    mutable int mte = 8;

    friend void FriendFun();

};
  • 编译器处理类:先编译类的声明,再编译函数体

2.this指针

  • this总是指向“这个”对象,所以this是一个常量指针我们不能改变this地址
  • 每次我们调用一个成员函数时,则编译器会把该对象的地址传递给函数的隐式形参this

3.const成员函数

  • 将 const 放在成员函数参数列表之后,此时,紧跟在参数列表后的 const 表示 this 是一个指向常量的指针
  • 常量对象,以及常量对象的引用或指针只能调用常量成员函数
  • 可以用于成员函数的重载

4.可变成员(mutable)

  • 被声明为 mutable 类型的变量即使在一个const对象内也能被修改
  • 被声明为 mutable 类型的变量可以在 const 成员函数中被修改

5.访问控制

  • public:整个程序内可被访问
  • protected:只有类和该类的子类可以访问
  • private:只有该类自身可以访问

6.构造函数

  • 只要类被创建就会执行构造函数
  • 类内的初始值是通过默认构造函数初始化的
  • 一旦我们定义了其他的构造函数,默认构造函数就不会自动创建
  • 如果类包含有内置类型或者复合类型的成员(指针或数组等),则只有这些类型全部被赋予了类内的初始值时,这个类才适合于使用合成的默认构造函数
  • 若类中含有一个其他类的成员且这个成员的类型没有默认构造函数,那么编译器是无法初始化该成员的
  • 构造函数体内执行的是赋值操作

7.构造函数初始值列表

  • 类成员变量定义的顺序和声明的顺序一致
  • 当成员变量被构造函数初始值列表忽略时,它将会被隐式初始化
  • 类的const成员变量必须在构造函数初始值列表中初始化或在类内直接初始化,不能在构造函数体内赋值

8.析构函数

  • 当析构函数是私有成员时,该类的对象只能在堆上创建(new操作创建)不能在栈上创建

9.友元

  • 被声明为该类友元的类,函数,其他类的成员函数可以访问该类的私有成员
  • 友元不是类的成员
  • 友元函数不是该函数的声明,该函数在类的外部仍需声明,友元声明的作用是影响访问权限,并非普通意义上的声明
  • 友元关系不存在传递性

10.类的声明

  • 前向声明:在声明之后,定义之前是一个不完全类型,此时只能,定义指向这种类型的指针或引用,也可以声明以不完全类型作为参数或者返回类型
class MyClass;
  • 一旦一个类的名字出现后,它就被认为是声明过了,因此类允许包含指向自身的引用或指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值