default (C++)

Indicates that the custom or dispinterface defined within a coclass represents the default programmability interface.


[ default(interface1, interface2) ]


The default interface that will be made available to scripting environments that create an object based on the class defined with the default attribute.

If no default interface is specified, the first occurrence of a nonsource interface is used as the default.

(Optional) The default source interface. You must also specify this interface with the source attribute.

If no default source interface is specified, the first source interface is used as the default.


The default C++ attribute has the same functionality as the default MIDL attribute. The default attribute is also used with the case attribute.


The following code shows how default is used on the definition of a coclass to specify ICustomDispatch as the default programmability interface:

// cpp_attr_ref_default.cpp
// compile with: /LD
#include "windows.h"

[object, uuid("9E66A290-4365-11D2-A997-00C04FA37DDB")]
__interface ICustom {
   HRESULT Custom([in] long l, [out, retval] long *pLong);

[dual, uuid("9E66A291-4365-11D2-A997-00C04FA37DDB")]
__interface IDual {
   HRESULT Dual([in] long l, [out, retval] long *pLong);

[object, uuid("9E66A293-4365-11D2-A997-00C04FA37DDB")]
__interface ICustomDispatch : public IDispatch {
   HRESULT Dispatch([in] long l, [out, retval] long *pLong);

[   coclass, default(ICustomDispatch), source(IDual), uuid("9E66A294-4365-11D2-A997-00C04FA37DDB")
class CClass : public ICustom, public IDual, public ICustomDispatch {
   HRESULT Custom(long l, long *pLong) { return(S_OK); }
   HRESULT Dual(long l, long *pLong) { return(S_OK); }
   HRESULT Dispatch(long l, long *pLong) { return(S_OK); }

int main() {
#if 0 // Can't instantiate without implementations of IUnknown/IDispatch
   CClass *pClass = new CClass;

   long llong;

   pClass->custom(1, &llong);
   pClass->dual(1, &llong);
   pClass->dispinterface(1, &llong);
   pClass->dispatch(1, &llong);

   delete pClass;

The source attribute also has an example of how to use default.


Attribute Context

Applies to class, struct, data member
Repeatable No
Required attributes coclass (when applied to class or struct)
Invalid attributes None

For more information, see Attribute Contexts.

See also

IDL Attributes
Class Attributes