C++回顾day03---<类型转换>

一:C++类型转换

(一)static_cast<>() 静态类型转换:基本类型可以转换但是指针类型不允许。可以进行隐式类型转换

double n=1.23
int m=static_case<>(n)

(二)reinterpreter_cast<>() 重新解释类型:同C中的强制类型转换。可以转换指针

char* p = "Hello";
int* pi = reinterpret_cast<int *>(p);

(三)dynamic_cast<>() 多态类型转换:用于实现多态的子类和父类之间的转换

class A
{
public:
    int a;
public:
    A(int n)
    {
        this->a = n;
    }

    virtual void say()
    {
        cout << "A say" << endl;
    }
};

class B :public A
{
public:
    int b;

    B(int m, int n) :A(n)
    {
        this->b = m;
    }

    virtual void say()
    {
        cout << "B say" << endl;
    }
};
void main()
{
    A* a = new B(10,5);
    B* b = dynamic_cast<B*>(a);    //父类和子类必须满足多态要求(含有virtual函数重写)
    system("pause");
}

(四)const_cast<>():去除变量的只读属性(前提是变量在内存中可以修改)

void ReadOnly(const char* name)
{
    char* tn = const_cast<char*>(name);
    tn[0] = 'W';
}

void main()
{
    char name[] = "Hello";
    cout << name << endl;
    ReadOnly(name);
    cout << name << endl;
    system("pause");
}

若是不允许修改:

 

posted @ 2019-04-27 14:49  山上有风景  阅读(189)  评论(0编辑  收藏  举报