跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

C++类型转换,这四种方式你真的懂了吗?

文章导读

大家好,我是顺亿,今天咱们来聊聊C++中那些让人头疼的类型转换。类型转换在编程中很常见,但有时候也会让人摸不着头脑。今天我们就来详细解析C++中常用的四种类型转换方式,让你对这些转换了如指掌。

1. 静态类型转换

静态类型转换主要用于两种转换环境:

  • C++内置类型的转换:这跟C风格强转有点像。

  • 当有继承关系存在时的强转:

#include 
using namespace std;

class A {
public:
    int a = 100;
    void Ashow_info() {
        cout << this->a << endl;
    }
};

class B : public A {
public:
    int a = 200;
    int b = 300;
    int c = 400;
    void Bshow_info() {
        cout << this->a << this->b << this->c << endl;
    }
};

int main() {
    A* a = new B;
    static_cast(a)->Bshow_info();
    return 0;
}

这里我们通过子类安全的访问到父类中的a值。

安全与不安全的情况

那么何时不安全?何时安全?

不安全的情况

不安全的情况如下:

#include 
using namespace std;

class A {
public:
    int a = 100;
    void Ashow_info() {
        cout << this->a << endl;
    }
};

class B : public A {
public:
    int a = 200;
    int b = 300;
    int c = 400;
    void Bshow_info() {
        cout << this->a << this->b << this->c << endl;
    }
};

int main() {
    A* a = new A;
    static_cast(a)->Bshow_info();
    return 0;
}

如图所示结果中并没有出现本应该打出的200,300,400,这就是不知道子类空间是否被开辟而向下访问造成的结果。

安全的情况

安全的情况如下:

#include 
using namespace std;

class A {
public:
    int a = 100;
    void Ashow_info() {
        cout << this->a << endl;
    }
};

class B : public A {
public:
    int a = 200;
    int b = 300;
    int c = 400;
    void Bshow_info() {
        cout << this->a << this->b << this->c << endl;
    }
};

int main() {
    A* a = new B;
    static_cast(a)->Bshow_info();
    return 0;
}

如图所示,此时我们可以打出200,300,400,等数值,说明当我们知道子类空间被开辟时候,就可以安全的向下访问。

小结与拓展

好了,今天关于C++类型转换的内容就聊到这里。希望这篇文章能帮助你更好地理解C++的类型转换。如果你对编程还有其他疑问,欢迎关注趣航编程网(www.vqhf.com),这里有更多精彩内容等着你。

我是顺亿,我们下期再见!

相关文章