I'm not really sure about the answer to your question but based off what you have posted it looks like name, surname and salary could all be members of employee and just be inherited. seems kinda pointless to have it written in there however many times. The only real difference at this point is the job title. That being said kinda pointless to have separate classes at all. I'm sure you have your reasons. you wouldn't have to worry about making vectors storing different types or whatever either.
If Employee is a generic class that should not be instantiated directly, and it only provides a "framework" for other specialized classes to implement directly, then make it abstract.
If Employee can be instantiated directly and an Employee object should be able to getInfo on itself, then don't make it abstract.
asxxx, is that your actual question? Because your code doesn't even compile currently. Whether the base class remains abstract is the least of your worries.
And as markyrocks mentioned, you haven't shown any reasonable differentiation between your subclasses, so I agree that it's pointless to have separate classes here; it's currently just a bunch of code duplication.
Now code does compile and I am still wondering about base class(should be abstract or not). In fact I could inherit from Employee almost everything to create new worker/employee but in others cases it can impossible(for example class Animal) what would look like base class Animal. If I want to use abstract class, variables (name,salary etc) should be call virtual too ?
If there is never a need to instantiate a "Employee" object itself, then it is OK for Employee to be abstract. Otherwise, GetInfo needs an implementation for Employee. The way you have it right now is fine enough, but in my opinion the inheritance here is still unnecessary.
Variables can't be virtual, only functions can. A class is, by definition, abstract if it contains a pure virtual function, or doesn't implement an inherited pure virtual function.
Notice how you're doing basically the same thing in each of your constructors.
You should make it so your base class does the necessary work, and your subclass constructors call your base class constructor.
base class: