Symbian3/PDK/Source/GUID-F94CEC6D-C602-550F-9B12-856493F3C509.dita
author Graeme Price <GRAEME.PRICE@NOKIA.COM>
Fri, 15 Oct 2010 14:32:18 +0100
changeset 15 307f4279f433
parent 14 578be2adaf3e
permissions -rw-r--r--
Initial contribution of the Adaptation Documentation.

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
<!-- This component and the accompanying materials are made available under the terms of the License 
"Eclipse Public License v1.0" which accompanies this distribution, 
and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
<!-- Initial Contributors:
    Nokia Corporation - initial contribution.
Contributors: 
-->
<!DOCTYPE task
  PUBLIC "-//OASIS//DTD DITA Task//EN" "task.dtd">
<task xml:lang="en" id="GUID-F94CEC6D-C602-550F-9B12-856493F3C509"><title>Implementing an Interface </title><shortdesc>An interface implementation is a single unit of functionality that is instantiated through the interface definition. An implementation is created by deriving a class from the interface definition, and implementing its functions. An interface implementation actually provides the services defined by the interface. </shortdesc><prolog><metadata><keywords/></metadata></prolog><taskbody><steps id="GUID-7A342564-DF90-57AD-874C-164C7BE66B9A"><step id="GUID-C213F154-EEA1-503B-A184-AB76FF1DECE2"><cmd>Derive a class from the interface definition. </cmd> </step> <step id="GUID-C72498E7-82F6-598F-A1D7-613A89E9D4A2"><cmd>Implement the object creation functions like <codeph>NewL()</codeph> or <codeph>ConstructL()</codeph> for the derived class. </cmd> </step> <step id="GUID-0C9777EC-5998-5A83-9C13-3E45875BB748"><cmd>Call the appropiate <xref href="GUID-1344F049-81C4-3D17-AF46-8B5584680ADB.dita#GUID-1344F049-81C4-3D17-AF46-8B5584680ADB/GUID-C7F147AC-6D77-3169-AAB4-B27262B4333B"><apiname>REComSession::CreateImplementationL()</apiname></xref> function to instantiate an interface implementation that satisfies the specified interface. </cmd> </step> <step id="GUID-6379343D-1990-59ED-919E-AEB7185C1A44"><cmd>Implement the pure virtual functions defined by the interface definition, to provide required services to clients. </cmd> </step> </steps> <example id="GUID-8CE792E8-0E17-5660-A1E0-DF10E83B73D4"><title>Creating an interface implementation example</title> <p>The following code depicts an example segment of the interface definition class derived from <xref href="GUID-067293BF-B28C-3CEC-92F4-1351A795EA7F.dita"><apiname>CActive</apiname></xref>. </p> <codeblock id="GUID-D988EFE2-4F4E-5A5A-B1E8-1859A3FB8198" xml:space="preserve">class CExampleInterfaceDefinition : public CActive
    {
public:
    // Wraps ECom object instantiation
    static CExampleInterfaceDefinition* NewL();
    // Wraps ECom object destruction 
    virtual ~CExampleInterfaceDefinition();
    // Interface service 
    virtual void DoMethodL() = 0;
...
private:
    // Instance identifier key or UID.
    TUid iDtor_ID_Key;
    };</codeblock> <p>The following code depicts a class derived from the interface definition CExampleInterfaceDefinition. </p> <codeblock id="GUID-1F88C6F8-2486-5EDB-A7D3-0E15CB0C7633" xml:space="preserve">class CExampleIntImplementation : public CExampleInterfaceDefinition
    {
public:
    // Two-phase constructor
    static CExampleIntImplementation* NewL();
    // Destructor
    ~CExampleIntImplementation();
    // Implement the required methods from CExampleInterfaceDefinition 
    void DoMethodL();

private:
    void ConstructL();
    };</codeblock> <p>The following code depicts the implementation of the object creation functions and virtual functions in CExampleInterfaceDefinition. </p> <codeblock id="GUID-B1356DF4-C838-5DF8-AE43-5F503780E5DE" xml:space="preserve">CExampleIntImplementation* CExampleIntImplementation::NewL()
{
    CExampleIntImplementaion self = new (ELeave) CExampleIntImplmentation();
    CleanupStack::PushL(self);
    self-&gt;ConstructL();
    CleanupStack::Pop();
    return self;
}

void CExampleIntImplementation::ConstructL()
{
// specific implementation
}
CExampleIntImplementation::~CExampleIntImplementation()
{
}
    ~CExampleIntImplementation();

void CExampleIntImplementation::DoMethodL()
{
    // specific implementation of the DoMetholdL()
}

</codeblock> </example> </taskbody></task>