美文网首页
C++11 指针类型与赋值

C++11 指针类型与赋值

作者: 顽强的猫尾草 | 来源:发表于2019-03-03 09:53 被阅读0次

    不能用类型不匹配的指针来完成赋值,如下代码是错的:

    int i = 0;
    double *dp = &i;    // 非法,类型不匹配
    

    但是 void* 可用于存放任意对象的地址:

    int i = 42;
    void *p = &i;    // 合法
    

    还有特殊字面值 nullptr,可以转换成任意其它的指针类型,用来判断指针是否指向了一个合法的对象。

    如果一定要完成指针的类型转换,可以使用 C++11 的几种强制类型转换:

    1. 指针类型转换 (reinterpret_cast)
    int *pint = 1;
    char *pch = reinterpret_cast<char *>(pint);
    
    1. 涉及到 const 的指针类型转换 (const_cast)
    const int num[5] = { 1,2,3,4,5 };
    const int *p = num;
    int *pint = const_cast<int *>(p);
    
    1. 子类指针转化为父类指针 (dynamic_cast)
    class man {
    public:
        int name;
        // 加上 virtual 关键字, 可以使得父类用子类初始化后可以调用子类的函数
        virtual void run() {
            cout << "man is running" << endl;
        }
    };
    
    class son : public man {
    public:
        void run() {
            cout << "son is running" << endl;
        }
    };
    
    void main()
    {
        man *pman = new man;
        son *pson = new son;
        //子类指针转换为父类指针, 但是还是调用子类的函数
        man *pfu = dynamic_cast<man *>(pson);
        pfu->run();
    }
    

    相关文章

      网友评论

          本文标题:C++11 指针类型与赋值

          本文链接:https://www.haomeiwen.com/subject/lwfpuqtx.html