文章导读
大家好,我是顺亿,今天咱们来聊聊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),这里有更多精彩内容等着你。
