The following definitions from Abstract Data Types (1996) by Dale and Walker:
Data Structures: the implementation of structured relationships.
ADTs (abstract data types): classes of objects whose logical behavior is defined by a set of values and set of operations.
So, let's take a simple class in C++:
class Simple {
public:
void some_simple_action();
private:
int x, y;
};
Simple must be a data structure since it is an implementation, correct? With respect to this class, what is it's abstract data type?
Secondly, am I correct to surmise that ADTs are just a conceptual representation of something: as in the idea of something by which we can call by name? For example, there is a common idea or even formal/logical concept of what a stack is. If I implement a stack in a given programming language, then that which I wrote is now a data structure (of this abstract data type).
Am I thinking correctly?
For the most part - you are thinking right.
At a high level, concrete Data Type is a concept that lets you manufacture instances (called objects in OO)
An ADT (aka Interface) is a contract. It does not imply implementation.
WRT your Simple class, ADT would be smth like:
class ISimple {
public:
void some_simple_action() = 0;
};
And if you derive "Simple" class from it, you'd be able to inject it wherever the contract requires ISimple.