addWindow creates a CGUIWindow which is derived from IGUIWindow. Also the guienvironment is a CGUIEnvironment which is derived from IGUIEnvironment. The I class are Interfaces so users only have to know about them. Internally they all use classes which are derived from the Interfaces and implement all the virtual functions (or at least all pure virtual functions). If you look in the source folder of Irrlicht you can see all the implementation classes.