I would say that Noel Llopis's blog is probably the best instruction for a combination of object-oriented programming and data-oriented design. He is one of the originators of the DOD term, is a strong C++ programmer, and has written a good deal about his style and how he takes advantage of C++'s OO features.
I guess if I were to call out the key elements of combining them, according to Noel:
- Use POD and non-member, non-friend functions as much as possible. Non-member, non-friend functions improve encapsulation and are a key part of data-orientation because they keep the data, data.
- Avoid storing "temporary" state on your objects. Temporary state clogs up your data. If you need to cache something (e.g. for performance) then that belongs in a new class, with non-member non-friend functions linking the two types, not a is-a nor a has-a relationship.
- Avoid objects that can be in state A or state B. Prefer switching between two objects, one of which is A, and one of which is B.
- Avoid polymorphism, avoid virtual functions, avoid templates, avoid anything that makes your data have the syntactic appearance of sameness rather than actual sameness.
The other big name in DOD propaganda right now is Mike Acton of Insomniac, but reading what he's written I'd say he's not really pro-OO (or anti-OO, as long as it's still data-oriented).