スポンサーサイト

(--/--/-- --:--)

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。
【 permalink 】 | | page top↑ | edit
C++ と NullPointerException について。

(2012/02/19 19:57)

Visual C++ でしか試していないのですが、C++君は NULLポインタ経由でインスタンスメソッドを呼び出しても 死なない (0番地に対する EXCEPTION_ACCESS_VIOLATION が発生しない) ケースがあることを知りました。

☆ NULLポインタからのインスタンスメソッド呼び出し ☆

Foo* pFoo = 0;

// 死なない
pFoo->NonVirtualMethod();

# Javaの国に長期滞在していた私は、二度見しました。

この記事を全部読む
【 permalink 】 | msvc cplusplus | トラックバック(0) | コメント(0) | page top↑ | edit
(MFC) CArray<T*> と CTypedPtrArray<CPtrArray, T*> の違い。

(2012/02/18 20:52)

MFC で ポインタの動的配列を取り扱おうとし、選択肢が ふたつ あって悩みました。

  1. CArray。テンプレートパラメータの「TYPE」に、ポインタ型 を指定する。
  2. CTypedPtrArray。テンプレートパラメータの「BASE」に「CPtrArray」を指定し、「TYPE」に ポインタ型 を指定する。

上記2者について、メソッドの一覧を突き合わせて調べたところ、8割がたのメソッドはシグネチャまで一致したのですが、一部 違いが見つかりました。

この記事を全部読む
【 permalink 】 | mfc msvc cplusplus | トラックバック(0) | コメント(0) | page top↑ | edit
Privoxyで、Webページの読み込みが不完全になることがある件。

(2012/01/23 23:44)

ずいぶん前から Privoxy を愛用しているのですが、ここ最近、Webページが途中までしか読み込まれない現象に見舞われるようになりました。該当ページのソースを表示してみると、HTMLが途中でぶった切れて終わっています。

いろいろ試してみて回避策を見つけたので、ここに記録しておきます。

# 当方の Privoxy のバージョンは 3.0.18 です。ちなみに、ブラウザは Opera 11.60 です。

この記事を全部読む
【 permalink 】 | privoxy | トラックバック(0) | コメント(0) | page top↑ | edit
tumblr公式のブックマークレットを使うと、ウェブページのタイトルに含まれる「+」が空白に置き換えられてしまう。

(2011/12/21 00:48)

最近、tumblr をオンラインブックマーク代わりに使おうかと検討していたのですが、ちょっと困ったことがあったので調査および対策をしました。

本記事の成果物。

Share on Tumblr ブックマークレット 改良版 ※ブックマークレットですので、左クリックすると残念なことになります。

# 2011/12/21 追記。タイトルだけでなくURLも余分にパーセントエンコードするよう変更しました。

この記事を全部読む
【 permalink 】 | tumblr | トラックバック(0) | コメント(0) | page top↑ | edit
(C++) const限定子が一致しない多重ポインタ間の相互代入について。

(2011/12/12 01:12)

副題: 「どうして char**const char** に 代入できないの?」というFAQの無駄な深掘り

この記事を全部読む
【 permalink 】 | cplusplus msvc | トラックバック(0) | コメント(0) | page top↑ | edit
(C++) std::wcout でUNICODE日本語文字列を出力する。ロケール回りのお話。

(2011/12/05 01:34)

最初に結論。

std::wcout に日本語の UNICODE文字列 (ワイド文字列) を出力したい場合、事前に下記を実行しておくとよい。

  std::wcout.imbue(std::locale("Japanese", std::locale::ctype));

(効能)

  • std::wcout に日本語が出力できるようになる。
  • 数値を出力しても、カンマが付加されない。(詳細は後述)
この記事を全部読む
【 permalink 】 | cplusplus msvc | トラックバック(0) | コメント(0) | page top↑ | edit
「ご連絡を差し上げる」は敬語 (謙譲語) として正しい。

(2011/11/24 00:03)

これまでメールで「ご連絡いたします」などと書くたびに、「自分の行動に『ご』という接頭辞をつけていいのだろうか?」と悩んでおりました。

というわけで調べたところ、意図通りに 謙譲語 として扱われるようです。安心しました。

敬語 - Wikipedia」 の 「2.2 謙譲語」 より抜粋。

向かう先のある名詞に関しては接頭語「お / ご」を付けた形も謙譲語として用いられる。

  • 手紙→お手紙を差し上げる、辞退→ご辞退を申し上げる、ご連絡を差し上げる

これらは同じ語形で尊敬語とも謙譲語ともなる。

  • 先生へのお手紙、お客様へのご連絡 - 謙譲語
  • 先生からのお手紙、お客様からのご連絡 - 尊敬語
【 permalink 】 | | トラックバック(0) | コメント(0) | page top↑ | edit
privateメソッドのオーバーライドについて。(C++とJavaの違い)

(2011/11/23 23:28)

長らく Java をメインで使ってきたため、すっかり Java脳 になってしまいました。

最近 古巣の C++ に戻ろうとしているのですが、戸惑うことばかりです。


C++ では、privateメソッドをオーバーライドできる。

#include <iostream>
#include <memory>

class Base
{
public:
  void f()
  {
    g();
  }

private:
  virtual void g()
  {
    std::cout << "Base::g()" << std::endl;
  }
};

class Derived : public Base
{
private:
  void g()
  {
    std::cout << "Derived::g()" << std::endl;
  }
};

int main()
{
  std::auto_ptr<Base> p(new Derived());

  p->f(); // Derived::g() が出力される

  return 0;
}

Java では、privateメソッドをオーバーライドできない。

// Base.java
public class Base {

  public void f() {
    g();
  }
  
  private void g() {
    System.out.println("Base#g()");
  }
}

// Derived.java
public class Derived extends Base {

  // @Override // ← オーバーライドできていない
  private void g() {
    System.out.println("Derived#g()");
  }
}

// Main.java
public class Main {

  public static void main(String[] args) {
    Base p = new Derived();
    
    p.f(); // Base#g() が出力される
  }
}

# オーバーライドしたければ、g()protected にする。

【 permalink 】 | cplusplus java | トラックバック(0) | コメント(2) | page top↑ | edit
| ホーム | 次ページ