Let's say we have the following files:

```
//foo.h
class Foo
{
public:
    void foo()
    {
        //Great code here
    }    
};

//foo1.cpp
#include "foo.h"

void Foo1()
{
    Foo f1;
    f1.foo();
}

//foo2.cpp
#include "foo.h"

void Foo2()
{
    Foo f2;
    f2.foo();
}

```

When I compile them separated, they generate two objects: Foo1.o Foo2.o. When I link them together they link perfectly.

Now if I dump symbols table for both, the seems to implement Foo::foo function in the two compilation units. 

```
_ZN3Foo3fooEv

```

Now, **how does the linker distinguish which implementation to use?**