There's a few things that are backwords in your question, which to me implies you have certain assumptions on how octave (and specifically the octave-C++ interface) works, which do not apply.
E.g., if you do "Foo(9)", what is the resulting object in octave terms? Is it an octave object? Of course not; there's no reason a c++ class would be identical to an octave class (and it would be a rather big assumption to assume that octave devs have gone to the trouble to make octave objects identically compatible with c++ objects -- a task so monumental that no other language has attempted it).
Secondly, even if you did manage to somehow create a representation of a C++ object in octave ... where does it live in memory, and how do its functions operate? C++ is a compiled, static language, octave is an interpreted, dynamic language. So, really, the question of "importing" a c++ class into octave does not make as much sense as you think it does.
What you should be asking, is if there is an interface that allows you to do things with C++ classes, in octave.
And the answer is yes. Sort of. There is no interface for c++ classes "specifically", but there is a c++ interface in general.
So, depending on how you'd like to use the c++ class object in octave, you can use the octave-c++ interface to create a suitable API for your c++ class's functionality.
For example, if you need to have an "object" of some sort, within octave, that has methods that can be called, then an obvious choice would be to create an octave class, and simply make sure its methods are delegated to .oct/.mex files (which are compiled c++ code).
If you stick to the so-called "old style" of object oriented programming in octave (which I actually prefer), then this is as simple as replacing your function files inside the "@" folder with .oct files (ok, in theory, you can do this with the new 'classdef' style too if you want :p).
It would also imply that, since octave methods implicitly pass the octave object with them, your C++ interface would have to recreate the C++ equivalent object in the c++ code, and THEN perform the appropriate method call and return the result (which could be a new c++ object, which you'd then convert to an octave object, and return that, in order to represent changed state).
Alternatively, if all you need is to use some c++ class function "under the hood", while inside the c++ environment, but from an octave point of view all you really care about is passing some "initialization" parameters, and getting back a result, then you don't need an octave object at all, and all you need is a simple .oct based function, which takes some (initialization) parameters, passes them to the c++ interface, and simply "happens" to use c++ classes under the hood before returning a value to your octave workspace.
PS. I didn't talk about the "vector interface" addendum in your question, because that is covered at reasonable depth in the documentation, as mentioned by Cris. See https://octave.org/doc/v6.3.0/Matrices-and-Arrays-in-Oct_002dFiles.html#Matrices-and-Arrays-in-Oct_002dFiles in particular, if interested. The full C++ API is available at: https://octave.org/doxygen/stable/