Font型の宣言・初期化について
四方山  2015/04/22(Wed) 22:31
 Font型の初期化は、サンプルに載っているものでは、
Font a(50);
 でできるのですが、ヘッダーファイル内で宣言をしておき、コンストラクタで初期化を行おうとしたところ、その設定が反映されないようなのです。
 この場合、どうすれば初期化が可能でしょうか。
記事編集
Reputeless  2015/04/23(Thu) 01:51
どのようなコードでしょうか。
再現できるコードを貼ってください。
編集
四方山  2015/04/23(Thu) 08:40
例えばこんな感じです

class A{
public:
A();
void draw();
private:
Font font;
}

A(){ //コンストラクタ
font(50);
}

void A::draw(){
font.draw(0,0);
}

この変数fontの文字の大きさを変えたいのですが、デフォルトの大きさのまま表示されてしまっているのですが、
編集
Reputeless  2015/04/23(Thu) 10:01
コンパイルエラーにならないため気付きにくいのですが、コードの誤りです。
↑の font(50) は Font::operator() であり、
フォントのサイズを決めるコンストラクタ呼び出し Font::Font(int) にはなっていません。

Font::operator() は
font(L"Hello").draw() や
font(30, L"秒").draw() や
font(50).draw() のように、テキストとして描くものを指定するときに使われます。

このようなクラスでメンバの Font のコンストラクタを呼びたい場合は

[A] クラスコンストラクタの初期化リストを使う

class Widget
{
public:

Widget()
: m_font(50)
{

}

void draw() const
{
m_font(L"Test").draw();
}

private:

Font m_font;
};


[B] オブジェクトを作って代入する

class Widget
{
public:

Widget()
{
m_font = Font(50);
}

void draw() const
{
m_font(L"Test").draw();
}

private:

Font m_font;
};


の 2 通りの方法があります。
[A] のほうが [B] よりも少し効率的です。
編集
四方山  2015/04/26(Sun) 13:10
返信遅れてしまい申し訳ありません。
アドバイスありがとうございました。
編集
件名
Re: Font型の宣言・初期化について
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -