【北上广深杭大厂编程面试题】C++篇...这里介绍C++四种强制类型转换有哪些?(一)

【北上广深杭大厂编程面试题】C++篇…这里介绍C++四种强制类型转换有哪些?(一)

【北上广深杭大厂编程面试题】C++篇…这里介绍C++四种强制类型转换有哪些?(一)


文章目录

  • 【北上广深杭大厂编程面试题】C++篇...这里介绍C++四种强制类型转换有哪些?(一)
  • 前言
  • 1. `static_cast`
    • 用途:
    • 特点:
    • 例子:
  • 2. `dynamic_cast`
    • 用途:
    • 特点:
    • 例子:
    • 注意:


欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议详细信息可参考:https://ais.cn/u/EbMjMn

前言

C++ 提供了 四种强制类型转换,它们各自有不同的用途和语法。它们是:

  1. static_cast
  2. dynamic_cast
  3. const_cast
  4. reinterpret_cast

每种转换都用于不同的场景,并具有不同的行为和限制。接下来,我将逐一详细解释每种类型转换的用法和适用场景。

1. static_cast

用途:

  • static_cast 用于进行类型转换,通常用于转换两个相关类型之间的转换。它适用于转换类层次结构中的基类和派生类之间的指针或引用,或简单的基本数据类型之间的转换。

特点:

  • 主要用于转换在编译时已知的类型,且没有运行时类型检查。
  • 不能用于类层次结构中的多态类型(除非是指针或引用的转换)。
  • 不能用于将 constvolatile 去除(使用 const_cast)。

例子:

#include 

class Base {
public:
    virtual void show() { std::cout << "Base class" << std::endl; }
};

class Derived : public Base {
public:
    void show() override { std::cout << "Derived class" << std::endl; }
};

int main() {
    Base* base = new Derived;
    // static_cast 用于将基类指针转换为派生类指针
    Derived* derived = static_cast<Derived*>(base);
    derived->show();  // 输出 "Derived class"
    delete base;
    return 0;
}

2. dynamic_cast

用途:

  • dynamic_cast 主要用于处理 多态类型(即存在虚函数的类)之间的转换。它用于执行运行时类型检查,适用于将基类指针或引用转换为派生类指针或引用。

特点:

  • 用于多态类类型的转换,确保安全的类型转换。
  • 如果转换不成功,dynamic_cast 会返回 nullptr(对于指针类型)或抛出 std::bad_cast 异常(对于引用类型)。
  • 只能用于 指针 或 引用 类型的转换。

例子:

#include 
#include 

class Base {
public:
    virtual ~Base() {}  // 必须有虚析构函数
    virtual void show() { std::cout << "Base class" << std::endl; }
};

class Derived : public Base {
public:
    void show() override { std::cout << "Derived class" << std::endl; }
};

int main() {
    Base* base = new Derived;
    // dynamic_cast 用于安全转换
    Derived* derived = dynamic_cast<Derived*>(base);
    if (derived) {
        derived->show();  // 输出 "Derived class"
    } else {
        std::cout << "Conversion failed." << std::endl;
    }

    Base* base2 = new Base;
    // 这里转换失败
    Derived* derived2 = dynamic_cast<Derived*>(base2);
    if (!derived2) {
        std::cout << "Conversion failed." << std::endl;  // 输出 "Conversion failed."
    }
    delete base;
    delete base2;
    return 0;
}

注意:

  • dynamic_cast 需要多态类(即有虚函数),否则编译时会报错。
  • 适用于安全地进行向下转换(基类指针/引用转换为派生类指针/引用)。

下节请参考:【北上广深杭大厂编程面试题】C++篇…这里介绍C++四种强制类型转换有哪些?(二)

你可能感兴趣的:(计算机基础知识和编程,c++,面试,java,开发语言,职场和发展)