危ないというか、非効率な設計にはなってしまいますね。
ただ"良い"オブジェクト指向設計は一度コードを書いただけでは身に付きません。
色んなコードを書いてみて徐々に身に着くものですので、沢山本を読んで沢山コーディングしてみましょう。
まずはオブジェクト指向設計系の本を読んでみるとよいかと思います。
> 少量もののために継承を使ってしまっても良いのでしょうか?
それ自体は全く問題ないです。
差異が極一部しかないとしても、分ける必要があるときは分けてベースクラスを作るべきです。
> また、継承した子クラスを親クラスとして扱っても良いのでしょうか?
全く問題ないです。
一般的なフレームワークの中身のコードを見てみると追いきれないほど深い継承関係にあることがほとんどです。
なお、例えばJava言語は、その言語自体、すべてのクラスの基底クラスはObjectクラスから派生します。
従って子クラスを一つ作っただけでそれは既に孫より深いクラスなのです。
> 子クラスAには使わず、子クラスB,Cは使う関数を親クラスに持たせるのは良いのでしょうか?
一般的には普通です。
親でデフォルトの動きを定義するか、純粋仮装関数にして必ず実装するようにしてもいいでしょう。
オブジェクト指向の継承関係に困った時にはまず
「is-a has-a」
https://www.google.co.jp/search?q=is-a+OR+has-a
で検索してみるといいでしょう。
但し、インターフェイスクラスではないクラスの多重継承関係にあるようなクラスが現れたらそれはよくない設計の現れです。
多重継承とは、よくない設計の代表で、JAVAやC#などのモダンな言語ではほとんど言語規格で禁止されています。
しかしC++はインターフェイスクラスがないので、多重継承できる言語仕様になっていますが、
これは言語的欠陥とも言えると思われるC++の欠点です。
純粋仮装関数しかないインターフェイスクラス以外の物と一緒に多重継承するようなケースが出てきたら注意してください。
また、今回の質問は一般的なことに関する回答になっており、具体的コードに落とすとそれは間違いであるケースも考えられます。
従ってコードを提示されるとより回答しやすくなります。