将它转换为基类指针是否安全?

Vin*_*rta 0 c++ polymorphism pointers

我正在学习C++,这次我搞乱了指针,研究了this指针和多态.我的问题是,转换是否安全,我知道基本上我可以m_uConnectedUsers直接从CUser课堂上访问因为'公共',但我可能会找到一个需要它的机会,我想知道你的专业人士的意见它.

#include <windows.h>
#include <iostream>

using namespace std;


class CUserCounter
{
public:
    CUserCounter();
    virtual ~CUserCounter(){};

    BOOL m_bEmpty;
    u_long m_uConnectedUsers;
};

CUserCounter::CUserCounter()
{
    m_bEmpty = TRUE;
    m_uConnectedUsers = 0;
}

class CUser : public CUserCounter
{
public:
    CUser(LPCTSTR szName, BOOL bConnected, BOOL bChatting = FALSE );
    virtual ~CUser(){};

    BOOL m_bConnected;
    BOOL m_bIsChatting;
    TCHAR szCharName[32];

    bool IncreaseMoverMeter( unsigned uMeters );
};

CUser::CUser( LPCTSTR szName, BOOL bConnected, BOOL bChatting )
{
    if( szName )
    {
        if( strlen( szName ) > 30 )
            strcpy( szCharName, "Invalid" );
        else
            strcpy( szCharName, szName );
    }
    m_bConnected = bConnected;
    m_bIsChatting = bChatting;
}

bool CUser::IncreaseMoverMeter( unsigned uMeters )
{
    //is it safe? how does it works
    CUserCounter* pUserCounter = (CUserCounter*)this;
    if( pUserCounter )
    {
        pUserCounter->m_uConnectedUsers++;
        return true;
    }
    return false;
}


int main( int argc, char *argv[] )
{             
    CUser *pUser = new CUser( "Jonh", FALSE );
    std::cout << pUser->IncreaseMoverMeter( 4 );

    system("pause>nul");
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 6

是的,这是安全的,但也没有必要.:)

转换是隐式的,因此无需强制转换.

CUser CUserCounter(至少在你的设计中),所以指向CUsera的指针也是指向a的指针CUserCounter.