Area calculator for shapes as an OOP interview test
I see some things that may help you improve your code.

Don't overcomplicate your code

The only thing required of the Shape and Triangle classes is the calculation of area.  For that reason, the code can be considerably simplified if the constructor calculates and stores the area.

Use const where practical

The Area() function probably shouldn't alter the underlying Shape object, so it makes sense to declare it const.

Use a standard exception where appropriate

There's really nothing, well... exceptional about the Exception class, so it seems not really to be required.  Maybe std::domain_error could be used instead like this:

throw std::domain_error("Any two sides of a triangle must be longer than one");


Provide a test driver

This is more about getting a good review rather than the code itself, but it's often good to give reviewers a complete, compileable example to allow them to see the code in context.  Here's what I used:

#include &lt;iostream&gt;
int main() {
    Triangle t1{3, 4, 5};
    std::cout &lt;&lt; t1.Area() &lt;&lt; '\n';
    try {
        Triangle t2{3, 4, 15};
    }
    catch (std::exception &amp;e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
    Triangle t3{3, 4};
    std::cout &lt;&lt; t3.Area() &lt;&lt; '\n';
}


Use std:: for math functions

The sqrt function is often in the global namespace, but it's required to be in the std namespace.  For that reason, it's probably safer to write std::sqrt than just sqrt.

Use standard keywords

Instead of _NOEXCEPT which is not standard, the code could use noexcept.

Reworked example

#include &lt;string&gt;
#include &lt;cmath&gt;
#include &lt;stdexcept&gt;

class Shape
{
public:
    virtual double Area() const = 0;
};

class Triangle : public Shape
{
public:
    Triangle(double base, double height);
    Triangle(double a, double b, double c);
    double Area() const override { return area;}

private:
    double area;
};

Triangle::Triangle(double base, double height) 
    : area{(base * height)/2}
{
}

Triangle::Triangle(double a, double b, double c) 
    : area{(a-b-c)*(-a+b-c)*(a+b-c)*(a+b+c)/16}
{
    if (area &lt; 0)
        throw std::domain_error("Any two sides of a triangle must be longer than one");
    area = std::sqrt(area);
}