Here is a link to some code I wrote to help some one else with a similar thing. It isn't complete, and some of the return types aren't right because this is for an assignment.
The main idea with my code is to have 2 classes, 1 for the Account itself, and a Bank class that deals with Account objects.
It is different from your situation because it does not handle withdrawals & deposits. However it shouldn't be hard to implement that
I don't think you should have classes for different types of accounts, the account type should just be a member variable.
Your classes are circular because they have members that are of the same type. Objects should be created in main, not inside the class.
The other thing to understand about classes is the concept of encapsulation. The functionality of a class should be contained in the class. You will see in my code how little there is in main().
You are welcome to use my code as a starting point, IMO that might be better than continuing with your code. I am sorry to pour cold water all over your creation, but don't worry - it won't be the first time that it has happened to anyone.
Hope all goes well, I look forward to helping out further if needed.