-1

十分な情報を提供し、これに正しくタイトルを付けたことを願っています。

一般に、アプリケーションにデータを格納するクラスが必要であり、同じデータにアクセスするには他のいくつかのクラスが必要です。基本的に、複数のクラス間でデータを共有します。

短い/簡潔なコードは次のとおりです。

example.cpp(メインアプリケーション)

// example.cpp : Defines the entry point for the console application.
//
#include "AnotherClass.h"
#include "ObjectClass.h"
#include "stdafx.h"
#include <iostream>  
#include <iomanip>

using namespace std;  
//Prototype
static void do_example ( );

int main()  

{  
    do_example ( );
}

static void do_example ( ) {


    MyObject.a = 5;
    cout <<"MyObject.a value set in main application is "<<MyObject.a<<"\n";

    AnotherClass    m_AnotherClass;

    m_AnotherClass.PrintValue();

}       

ObjectClass.h

class ObjectClass {
public:
    ObjectClass(); // Constructor
    int a; // Public variable
} static MyObject;

ObjecClass.cpp

#include "ObjectClass.h"

ObjectClass::ObjectClass() {

    a = 0;

}

AnotherClass.h

class AnotherClass {
public:
    AnotherClass(); // Constructor

    void PrintValue(); // Public function
    int value; // Public variable

};

AnotherClass.cpp

#include "AnotherClass.h"
#include "ObjectClass.h"
#include "stdafx.h"
#include <iostream>  
#include <iomanip>

using namespace std; 

AnotherClass::AnotherClass() {

    value = MyObject.a;

}

void AnotherClass::PrintValue() {

    cout <<"value in AnotherClass is "<<value<<"\n";
    cout <<"it should be the same."<<"\n";
}

ただし、値は、MyObjectの新しいインスタンスであるかのように、デフォルト値の0です。ただし、静的MyObjectから値5を取得する必要があります。

私は何が欠けていますか?

4

1 に答える 1

3

静的クラスインスタンスは、それ自体が静的変数です。予想されることも理にかなっていますが、コードは静的インスタンスの処理方法を示していません。実際、両方MyClassInstanceが同じオブジェクトを参照している場合は、静的宣言も必要ありません。

また、静的変数はcppファイルで定義されています。ヘッダーで定義すると、それを含むcppファイル(コンパイル単位)で個別の静的変数が定義されます。したがって、メインのcppファイルで静的オブジェクトを定義extern MyStaticClassし、ヘッダーファイルで使用します。次に、リンカは使用を同じ変数にリンクします。

于 2012-04-17T18:44:58.293 に答える