类的基本概念

主要概念

对象:描述客观事物的一个实体,其中包含对象的属性和行为。

类是对对象的抽象化,类会概括对象,抽象起来就是数据与其对应的操作。数据便为静态存储,操作便为动态特征

访问权限修饰符

类中有访问权限修饰符:private,public,protected

被public修饰的函数和属性可以在类的外部被访问,被private修饰的属性只能在类的内部被访问,proteced是受保护对象,protected也只可以在类中或则和其派生类中进行访问

类中的函数

同时类中会有构造函数、析构函数和成员函数

如果在类中没有自己定义构造函数,系统自己定义一个空的构造函数。该函数只负责创建对象,不做初始化工作,当类中定义了任何形式的构造函数时,系统便不在产生默认构造函数了。

构造函数可以进行函数重载

构造函数的格式如下:

类名::类名(参数列表)

{

函数体;//有关初始化的代码

}

同样成员函数也可以进行重载

成员函数的格式如下:

返回值类型 类名::函数名 (参数列表)

{

函数体;

}

类中的析构函数是一个特殊的成员函数,用于在对象销毁时执行必要的清理工作,同时如果是一个派生类,其还会调用其基类的析构函数

析构函数的格式如下: ~类名()

{

函数体;

}

类的特点

类定义后,可以视为一种新的数据类型,可以使用指针指向该类,也可以进行和其他数据类型类似的操作。

成员初始化列表

初始化的作用,格式如下:

假设类中x和y两个属性参量,假设在构造函数中运用成员初始化列表

类名::类名 (参数列表 (参数1和参数2)):x(参数1名字),y(参数2名字){}

必须要使用成员初始化列表的情况

  1. 该类的成员变量是个引用

  2. 该类的成员变量是const型

  3. 该类是继承一个基类,并且基类中有构造函数,构造函数中有参数

  4. 该类的成员变量是一个类的类型,而且该类的构造函数带有参数时

成员初始化练列表中,会优先函数体来执行,可以使得参数提前传好。

this指针

this指针用于指向当前对象的地址,在类的成员函数中,this指针可以自动获取当前对象的地址,并且可以显式地使用它来访问当前对象的成员变量和成员函数

同时this指针本质是一个指针常量,他存储了调用他的对象的地址,并且不可以被修改

this指针的特点

  1. this指针是一个隐含的指针,在每个成员函数中都存在,无需显式声明

  2. this指针是指向当前类的指针

  3. this指针是在成员函数的开始前构造,并在成员函数的结束后清除

  4. 在调用成员函数时,编译器会自动将当前对象的地址传递给this指针

访问方式如下:

this-> 成员函数

this->成员变量

类的继承与派生

继承是保持已有类的特性而构造新类的过程,派生是在已有类的基础上新增自己的特性而产生新类的过程。被继承的已有类称为基类(或父类),派生出的新类称为派生类(或子类)。

语法格式:

class 派生类: 继承访问控制 基类{

public:

共有成员列表

protected:

受保护成员列表

private:

私有成员列表

};

如何记忆,首先需要声明一个类对象,这个类对象是来自基类的后面就紧跟着基类就好了

类成员的访问控制规则,✔表示可以访问,✘表示不可以访问

继承访问控制基类(类本身)派生类其他类或函数
public
protected
private

在派生类通过继承访问控制继承基类后,继承的函数的访问规则如下

简单来说,通过public继承的成员函数,在派生类中会保留其访问权限

通过private继承的派生类中的成员函数都会变成私有,只可以在该派生类中访问,也不可以派生

通过protected继承的基类中的成员函数,都会收到保护,只可以在该派生类中,但仍然可以作为基类,将上述成员函数派生给下一个派生类。

在派生类继承基类后,优先启动基类的构函数;优先启动派生类的析构函数。

演示代码:

#include<iostream>
using namespace std;
class a
{
public:
    a()
    {
        cout << "基类进行创建" << endl;
    }
    ~a()
    {
        cout << "基类进行销毁" << endl;
    }
};
class b :protected a
{
public:
    b()
    {
        cout << "派生类进行创建" << endl;
    }
    ~b()
    {
        cout << "派生类进行销毁" << endl;
    }
};
int main()
{
    b xx;
    return 0;
}

演示结果

派生类中可以不去定义构造函数的情况:

  1. 基类中没有定义构造函数

  2. 基类的构造函数为无参构造或着全部参数都指定了默认值

派生类中必须定义构造函数的情况:

基类或者成员对象所属类中只含有带参数的构造函数时

但因为构造函数运行时,会首先执行基类的构造函数,所以需要优先将参数传递给基类的构造函数,即需要使用到成员初始化列表,来实现基类的提前构造

首先需要调用基类的构造函数

eg

派生类名字 (参数列表):基类的名字(参数列表)

{

函数体;

}

string

  1. size / length

    • 用法: 获取字符串的长度。

    • 原型

      :

      size_type size() const noexcept;
      size_type length() const noexcept;
    • 参数: 无。

    • 返回值: size_type - 字符串中字符的数量。

  2. empty

    • 用法: 检查字符串是否为空。

    • 原型

      :

      ​
      bool empty() const noexcept;
    • 参数: 无。

    • 返回值: bool - 如果字符串为空则返回true,否则返回false

  3. clear

    • 用法: 清空字符串内容。

    • 原型

      :

      ​
      void clear() noexcept;
    • 参数: 无。

    • 返回值: 无。

  4. append

    • 用法: 向字符串末尾添加字符或另一个字符串。

    • 原型

      :

      string& append(const string& str);
      string& append(const string& str, size_type subpos, size_type sublen);
      string& append(const char* s);
      string& append(const char* s, size_type n);
      string& append(size_type n, char c);
      template<class InputIt>
      string& append(InputIt first, InputIt last);
    • 参数: 根据不同的重载,参数可以是字符串、C字符串、字符或迭代器范围。

    • 返回值: string& - 追加操作后的字符串自身的引用。

  5. insert

    • 用法: 在字符串指定位置插入字符或另一个字符串。

    • 原型

      :

      string& insert(size_type pos, const string& str);
      string& insert(size_type pos, const string& str, size_type subpos, size_type sublen);
      string& insert(size_type pos, const char* s);
      string& insert(size_type pos, const char* s, size_type n);
      string& insert(size_type pos, size_type n, char c);
      iterator insert(const_iterator p, char c);
      iterator insert(const_iterator p, size_type n, char c);
      template<class InputIt>
      iterator insert(const_iterator p, InputIt first, InputIt last);
    • 参数: 根据不同的重载,参数可以是位置、字符串、C字符串、字符、迭代器范围等。

    • 返回值: string& - 插入操作后的字符串自身的引用或指向新插入字符的迭代器。

  6. erase

    • 用法: 从字符串中移除字符。

    • 原型

      :

      string& erase(size_type pos = 0, size_type len = npos);
      iterator erase(const_iterator p);
      iterator erase(const_iterator first, const_iterator last);
    • 参数: 位置和长度或迭代器范围。

    • 返回值: string& - 删除操作后的字符串自身的引用或指向删除后下一个字符的迭代器。

  7. substr

    • 用法: 返回一个子字符串。

    • 原型

      :

      ​
      string substr(size_type pos = 0, size_type len = npos) const;
    • 参数: 起始位置和长度。

    • 返回值: string - 子字符串。

  8. find

    • 用法: 查找子字符串或字符在字符串中的位置。

    • 原型

      :

      size_type find(const string& str, size_type pos = 0) const noexcept;
      size_type find(const char* s, size_type pos = 0) const;
      size_type find(const char* s, size_type pos, size_type n) const;
      size_type find(char c, size_type pos = 0) const noexcept;
    • 参数: 子字符串、C字符串或字符,以及起始查找位置。

    • 返回值: size_type - 首次出现的位置,如果未找到则返回npos

  9. replace

    • 用法: 替换字符串中的部分内容。

    • 原型

      :

      string& replace(size_type pos, size_type len, const string& str);
      string& replace(const_iterator i1, const_iterator i2, const string& str);
      string& replace(size_type pos, size_type len, const char* s);
      string& replace(const_iterator i1, const_iterator i2, const char* s);
      string& replace(size_type pos, size_type len, const char* s, size_type n);
      string& replace(const_iterator i1, const_iterator i2, const char* s, size_type n);
      string& replace(size_type pos, size_type len, size_type n, char c);
      string& replace(const_iterator i1, const_iterator i2, size_type n, char c);
      template<class InputIt>
      string& replace(const_iterator i1, const_iterator i2, InputIt first, InputIt last);
    • 参数: 位置、长度、字符串、C字符串、字符或迭代器范围。

    • 返回值: string& - 替换操作后的字符串自身的引用。

  10. compare

    • 用法: 比较字符串。

    • 原型

      :

      int compare(const string& str) const noexcept;
      int compare(size_type pos1, size_type len1, const string& str) const;
      int compare(size_type pos1, size_type len1, const string& str, size_type pos2, size_type len2) const;
      int compare(const char* s) const noexcept;
      int compare(size_type pos1, size_type len1, const char* s, size_type n) const;
    • 参数: 要比较的字符串或C字符串及其位置和长度。

    • 返回值: int - 比较结果(负值表示小于,零表示等于,正值表示大于)。

  11. c_str

    • 用法: 获取C风格字符串指针。

    • 原型

      :

      ​
      const char* c_str() const noexcept;
    • 参数: 无。

    • 返回值: const char* - 指向字符串内容的C字符串指针。

  12. data

    • 用法: 获取指向字符串数据的指针。

    • 原型

      :

      const char* data() const noexcept;
      char* data() noexcept;  // C++17起可用
    • 参数: 无。

    • 返回值: const char* - 指向字符串内容的指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值