When I declare: My_String a; //My_String is the class// in main, what makes 'a' a string? Is it because the system eventually converts 'a' to ASCII? How should I be looking at this?
In programming, everything is just a bunch of numbers. What those numbers represent depends on how you use them. A string is a sequence of numbers, where each number represents a character. 'a' is 97, '0' is 48, etc. What makes string a string is the ability to print it's characters to a file or console. Notice that 'printing' only means sending the same numbers to some other place. It is your console or text editor that finally represents those numbers by letters.
By the way, in your code 'a' is simply a constant. When you write char a = 'a'; the compiler will translate that to char a = 97;. The former only exists for better readability.