• ベストアンサー

C++のクラスについて

C++でクラスをmain関数をすっきり書くことを目的に暗中模索中です。 あるファイルでC++のクラスを作ったとします そのクラスのファイルのオブジェクトをmain関数で利用したいのですがオブジェクトの生成をmain関数ではなく他のファイルでしてそれをincludeする形で利用したいのですがどういうコードを書いたらいいか分かりません 考え方や書き方を教えてください

noname#213498
noname#213498

質問者が選んだベストアンサー

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

例えば、 ~~~ main.cpp ~~~ #include "hoge.h" main() {   h.hogehoge(); } ~~~ hoge.h ~~~ class Choge {   public:   hogehoge(); } Choge h; とか。 > C++でクラスをmain関数をすっきり書くことを目的に暗中模索中です。 main関数だけ見ると分かりますが、すっきりする代わりに、どこで定義した何を持って来て何やってるのかが分からなくなります。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

ん~.... 「オブジェクトの生成をmain関数ではなく他のファイルでしてそれをincludeする」ってのが何を言っているのかよくわからんです.... ・「他のファイルでして」ってのは「他のファイルでオブジェクトを生成して」ってことですか? そうだとしたら, 他のファイルの「どこで」生成するのですか? ・「それをincludeする」の「それ」とはどれですか? 何をしたいのか, イメージが見えてこない.

関連するQ&A

  • c++,ある関数のクラスから別のクラスの関数を呼ぶ

    c++で、あるクラスのメンバ関数から、別のクラスのメンバ関すを呼びたいのですが、どのようにしたらできますか? 例えば、以下のような単純なコードを考えています。やりたいことは、Aのメンバ関数であるaaa()からBのクラスであるbbb()を呼びたいと思っています。その理由を少し説明します。ここでは、Aというクラスとmain関数はオープンソースコードを例えています。できるだけ、元のオープンソースコードを書き換えずに新たな機能を拡張したいと思っています。そこで、Bというクラスを使って、元のオープンソースコードに機能を拡張しようとしています。このような理由なので、bbb()という関数はaaa()という関数から呼びたいです。メイン関数には何も書き加えないのがベストです。 現状では、実行すると「this is aaa」という出力しか出ません。ここに「this is bbb」の出力を加えたいです。クラスAとBにある程度コマンドを追加して、解決できないでしょうか。 #include <iostream> using namespace std; //------------------------------------------------------ class A{ public: void aaa(); virtual void bbb(){} }; //------------------------------------------------------ //------------------------------------------------------ class B : public A{ public: void bbb(); }; //------------------------------------------------------ //------------------------------------------------------ void A::aaa() { cout << "this is aaa \n"; bbb(); } //------------------------------------------------------ //------------------------------------------------------ void B::bbb() { cout << "this is bbb \n"; } //------------------------------------------------------ //------------------------------------------------------ int main() { A a; a.aaa(); return 0; } //------------------------------------------------------

  • C言語について。

    C言語プログラマとしては、スタートアップコードは・・・ ・自分が書いたプログラムを、直接動かすために必要なライブラリ ・それはコンパイル後、リンカによって追加されるライブラリこれは、 どういう意味でしょうか?分かりやすく教えていただけると幸いです。すみません。で、 以下のかぶくんまんさんの回答です。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11247611941 で、 C言語におけるプログラミングとは「main関数を書くこと」に他ならない。なぜ「main関数を書く」ことがC言語におけるプログラミングに他ならないのかと言えば、それは偏に「C言語のコンパイラはmain関数を呼び出すプログラムを生成するから」です。それがmain関数を求めるので結果的にmain関数がリンクされ、そしてmain関数が求めるままに他の関数もリンクされていくわけです。 で、その「main関数を呼び出すプログラム」こそが、C言語における「スタートアップコード」。 という回答で、main関数以降は、プログラマが書くのですよね?プログラマが関数をリンクさせる様なプログラムを書くということでしょうか?教えていただけると幸いです。すみません。 という所が分かりません。教えていただけると幸いです。すみません。以下のURL https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12247932542

  • クラスと関数群のうまい使い方

    今、クラスを使ってPHP(今はPHP4を使っています)によるWEBアプリケーション(といっても、そんなに大げさなものではないですが)を作成しながら、クラスの使い方を勉強しています。 ある程度クラスを使うことには慣れてきたのですが、悩んでいることがあります。 今までは、別ファイルによく使う関数群をまとめて、呼び出す形でやっていました。 それを、クラスを使ってやるようになってから、それぞれのオブジェクトでの処理はそのクラスにまとめることで、すっきりとなりました。 が、全てのクラス(もしくはいくつかのクラス)で共通して使用する処理(文字列操作など)はどうすればいいのかと悩んでいます。 それぞれのクラスに同じ処理を書くのは、クラスを使う意味がない気がするので、避けるべきだと考えていています。 そこで、今までのように共通の処理を関数群にして、クラスファイルでインクルードして使うか、共通処理をもつクラスを作って使用するクラスの中でインスタンスを作成して処理関数を呼び出すか・・・とどちらがいいのでしょうか? ただ、関数群をまとめたファイルを作ると、他にクラスを使う意味がないような気もするし、共通処理をまとめたクラスを作ってその処理を利用するクラスでインスタンスを作るのは、処理的に重くなりそうでまたクラスの本来の意味からすると共通処理をまとめたクラスというのがおかしい気もするし。 根本的にクラスの作り方がまずいのかもしれませんが、良いアドバイス等あればご指摘下さい。 長文になりましたが、よろしくお願いいたします。 追伸) PHPでのクラスの学習についていい本やサイトなどあればそちらもお教え願えればと思います。

    • ベストアンサー
    • PHP
  • C++ クラスをメンバにもつクラスについて

    お世話になります。C++初心者でうまくコードが書けません(><) クラス1と2があり、クラス1のメンバにはクラス2があります。 メインでクラス1をインスタンス化してクラス2のfunc2を呼び出します。 func2ではクラス1のインスタンスから呼び出された場合にクラス1の m_int1を取得します。 Class Class1{ public:  int m_int1;  Class2 m_Class2; }; Class Class2{ public: void func2(); }; void Class2::func2(){  /*ここの記述方法が分かりません*/  /*C1から呼び出されたらC1のm_int1に100を入れる*/  /*以下間違え*/  class1 C2_1;/*別のclass1のオブジェクトなのでこれに入れてもダメっぽい*/  C2_1.m_int1 = 100; } void main(){  class1 C1;  C1.m_int1 = 10;  C1.m_class2.func(); } C1.m_class2.func()の中から呼び出したC1にアクセスする方法が 分かりません(TT)。実体がまだあるのだからアクセスする方法は あると思うのですが・・・ どなたかよろしくお願いします。

  • linuxにおけるCの自作ヘッダファイル

    現在C言語のしっかりと学ばなかった部分を学習したいと思い、自作ヘッダファイルの作成を勉強しています。 そこで、書籍のその章を一通り読んだあと、自分で簡単なものを作成してみましたが、エラーが出てうまくいきません。 どうしてかわかる方いたら教えてください。 コード *****main.c***** #include "print.h" int main(void) { print(); return 0; } *****print.c***** #include <stdio.h> void print(void) { printf("test\n"); } *****print.h***** extern void print(void); エラー /tmp/ccH551c1.o: In function `main': /home/ユーザ名/Documents/StudyC/main.c:5: undefined reference to `print' collect2: ld returned 1 exit status CentOS6.6にて端末上での実行です。 自分の解釈では、""でincludeすることでカレントディレクトリから目的のヘッダファイルを見つけ出してインクルードする、また、ヘッダファイル内でexternすることによってprint.cから目的の関数を定義しているので、main.cでは問題なく使えると思っています。 しかし、エラーではprint()が定義されていないと出るのでまったくわかりません・・・。

  • クラスを使ったC++の関数をCで呼び出すには?

     QNo.152285と類似の質問になりますが、独自に用意したクラスを内部で使用し、extern "C" を宣言した、C++の関数をCプログラムから呼び出し、Cコンパイラでリンクすることを考えています。  この場合、C++関数内で使用されるクラスについても、extern "C"の記述が必要でしょうか?  またその記述の仕方はどのようになるでしょうか?  あるいは、そういったことはできないのでしょうか?(coutが使えることを考えると、できないわけではないとも思っていますが)  あるいは、コンパイルの際の、オプションなどで解決できるでしょうか?  クラスはnewで生成して使用しています。 環境はソラリスのCCとccを使っています。 どうか、ご回答よろしくお願いします。

  • クラスが使えない。

    こんにちは。 PHPで、次のコードを使い、 クラスを使おうと思っていますが、 うまくいきません。 <?php echo "練習です!"; class mylesson{ public function ee(){ echo "erer"; } } $ob=new mylesson; $ob->ee(); ?> 練習です!のみ表示され、ererは 表示されません。 何がいけないのでしょうか。 よろしくお願いします。 また、別ファイルのクラスファイルを作りたいのですが、 この場合、include関数で、クラスファイルを 読み込めばいいのでしょうか。 追加ですいませんが、何かわかれば、お願いします。

    • ベストアンサー
    • PHP
  • C/C++関数間でのStringクラスの扱い

    以下のようなコードを実行してみましたが思い通りに動いてくれません. "sample"という文字列がstrへとコピーされると思ったのですが. stringクラスのc_str()メソッドはconst char*だと言っているので無理矢理キャストしたのが原因でしょうか.stringクラスは記憶領域を自動で変更してくれるのではないのですか.それともこの挙動は仕様ですか. -------- 以下コード -------- #include <iostream> #include <string> using namespace std; int func(char *); int main(void) {     string str("");     func((char *)str.c_str());     cout << "String: " << str << endl;     return EXIT_SUCCESS; } int func(char *buf) {     buf = "sample";     return 0; } -------- 以上コード --------

  • C++でクラスの自己診断を効率良く行うには?

    JavaやPythonで用いる事が可能なクラスの自己診断をC++で効率良く書くにはどうすればよいか、教えて頂けますか。 例えばカウンターを表すクラスCounterをJavaで書くと、 public class Counter { // ここにメンバー変数やメンバー関数の定義を置く public static void main(String args[]){ # 自己診断コード Counter ct = new Counter(); ct.count_up(); System.out.println(ct.get_count()); } } となると思います。このモジュールをそのまま実行すれば、自己診断コードが実行されますし、外部からこのモジュールを呼び出す場合は自己診断コードが呼び出されないようになるので、大変便利です。 Pythonの場合は、if __name__ == "__main__":の下に自己診断コードを置くと言うことがよく行われます。 このような自己診断をC++で効率良く実現するにはどうすればいいのでしょうか。 今考えている方法は、 // Counter.h class Counter { private: int counter; public: Counter(); void count_up(); int get_count(); }; // Counter.C #undef MAIN #include "Counter.h" using namespace std; // メンバー関数の定義をここに置く #ifdef MAIN int main(){ Counter ct; ct.count_up(); cout << ct.get_count() << endl; return 0; } #endif のように書く事ですが、自己診断・外部からの使用を切り替えるたびに#define MAIN <-> #undef MAINの書き換えを行わなければならず、少々不便です。 よろしくお願いします。

  • C言語:汎用のオブジェクトファイルのパス

    main.cで #include "fileio.h" して、関数の実体等をfileio.cに記述する場合コンパイルについてです。 fileio.hが様々なプログラムで使う関数群の場合で、/home/hoge/mylib 以下に fileio.h と fileio.o を置いたとします。また、main.cは別ディレクトリで開発しているとします。 環境変数C_INCLUDE_PATHを設定しておけばヘッダファイルは参照できました。(main.c内で#include "fileio.h" とするだけで参照できました) makeでコンパイルしたいのですが、オブジェクトファイルはMakefile中で LIBOBJS = /home/hoge/mylib/fileio.o などとフルパスで指定しなければいけないのでしょうか? ファイル入出力関数群など、汎用的な関数をまとめてmylibに置きたいので、どこかでmylibディレクトリのパスを指定して、ファイル名(fileio.o)だけで参照できるならそうしたいのですが。 また、そもそも汎用関数群はこういうディレクトリ構造で管理したほうがいい、などというアドバイスがあればお願いします。

専門家に質問してみよう