Basically, a virtual domain consists of a virtual data type and operations on this data type, the virtual operations. As sketched in the previous example, a virtual domain is introduced whenever a domain has subdomains that can have more than one representation. Each subdomain corresponds to a virtual domain, which can be viewed as a variable ranging over all domains that can actually be used in place of the subdomain. We call these domains ``virtual'' since there is neither an actual implementation of the operations in a virtual domain nor a concrete structure of the virtual data type. Both virtual operations and virtual type are just mapped to already implemented operations and defined data structures, respectively.
A virtual domain is introduced as an intermediate layer between the domain and its subdomain and its purpose is to keep the operations in the domain independent of the currently chosen representation of the subdomain.