ページ

2014年3月26日水曜日

ActiveBasic to C++:ActiveBasicのクラスについて考える

ActiveBasicでもクラスを使うことが出来ますが、自分はそれはC++を学ぶ上で邪魔になると思い、わざとパスしてC++の世界に飛びこんだわけですが Visual C++ をインストールした場所が外付けハードディスクで、しかも共用なのであっち行ったりこっち行ったりとなかなか使えず、Linux でやるにも Windows アプリケーションを作るのが非常に困難で(主にDXライブラリを使ったゲーム)、そして何と言っても少し疲れたので、ActiveBasicのクラスでもやってみようかなということでこの記事です。

C++:
//あいさつを登録して、あいさつと、あいさつした回数を表示する
#include <string>
#include <iostream>
using namespace std ;

class greeter {
string greetingword ;
int count ;
public:
greeter( string in ) {
count = 0 ;
greetingword = in ;
}

void greet() {
count ++ ;
cout << string << endl ;
cout << "これは" << count << "回目のあいさつです。" << endl ;
}
};

int main() {
string a ;
greeter* p ;
p = new greeter( "Hello!!" ) ;
while (1) {
cout << "何か入力してEnterを押してください [q]で終わる" << endl ;
cin >> a ;
if (a=="q") break ;
p -> greet() ;
}
delete p ;
return 0 ;
}

ActiveBasic:
#console

class greeter
    private
    greetingword As String
    count As Integer
   
    public
        sub greeter()
            count = 0
            greetingword = ""
        end sub
       
        function addgreeting( in As String )
            greetingword = in
        end function

        sub greet()
            count ++
            print greetingword
            print "これは" & Str$(count) & "回目のあいさつです。"
        end sub
end class

function main() As Integer
    dim a As String
    dim p As *greeter
    p = new greeter()
    p -> addgreeting( "hello!" )
   
    do
        print "何か入力してEnterを押してください。[q]で終了"
        input a
        if a="q" then exit do
       
        p -> greet()
    loop
   
    delete p
    main = 0
end function

dim result As Integer

result = main()

end

なぜかActiveBasicのほうがコーディングに時間がかかった。コンストラクタの中であいさつの文を代入すると結果がおかしくなったので別の関数に移して解決しました。
感想:
もともとの仕様としてクラスが備わっているC++には勝てないね

今回はここまで 

追記) ActiveBasic の方のサンプルプログラムで、クラス定義のときに "private" と書くところを"private:" と書いていましたので修正しました。

2014年3月25日火曜日

ActiveBasic to C++:配列が・・・

ActiveBasic:
#console
'配列を10個宣言する
Dim array[9] As Integer
'アクセスする
Print array[0]
Print array[1]
Print array[2]
Print array[3]
Print array[4]
....
Print array[9]

2014年3月22日土曜日

ActiveBasic to C++: ActiveBasicで使っていた関数を再現する

投稿がかなり遅れましたがこの間にかなりたくさんのことを学んでしまって全部記事にすると大変なので、ここを新しいスタートラインにして投稿を続けます。

それはともかく、C++を学んでいく中で分かったことがあります。それは
文字列がとんでもなく扱いにくい。
覚悟はしていましたが、ここまで面倒とは・・・
と思っていたんですが、こんなページを見つけました。(このページを見つけるよりも見つけやすいけれども・・・)

http://handasse.blogspot.com/2007/06/c_22.html

<sstream>をインクルードすれば文字列と数値の変換が簡単にできるのか。
でもいちいち stringstream なんて打ったり、初期化したりするのは面倒くさい。そこでActiveBasicで使っていた Val() 関数や Str$() 関数みたいなのを作ってみました。

2014年3月18日火曜日

ActiveBasic to C++: 条件式とか繰り返しとか

条件式:
ActiveBasic:
Dim a=1 As Integer
Dim b=1 As Integer
If a=b then
 a++
 b--
Elseif a=b+1 then
 a--
Else
 a--
 b++
End If

ActiveBasic to C++: 変数

宣言
ActiveBasic:
 Dim Temp=0 As Integer

C++:
 Int Temp=0;

C++での代入は型名を書いて変数を書くので、Dim命令語を書かない分ActiveBasicよりも楽。

代入
ActiveBasic:
 (Let) Temp=12

C++:
 Temp=12;

C++では代入演算子として'='が定義されているのでLet命令語を入力する必要がない。(Basicでも省略できるけどね)


2014年3月11日火曜日

Xubuntu 10.04 電源が上手く切れない!

なぜかウェブブラウザを使った後のシャットダウンが上手くいかない。
同じような症状に悩んでいる人もいるようです。

Ubuntu日本語フォーラム / 10.04でインターネット接続後にシャットダウンしても電源が落ちない:
https://forums.ubuntulinux.jp/viewtopic.php?id=8447

ですが、ここの記事を参考に調整しても上手くいかない。
この変更はそのままにして、ブラウザを起動したときとしていないときのプロセスの差を見てみることにしましたが、特に違いはありませんでした。

ログアウトした後だとちゃんと終了出来るので、面倒くさいだけで特に直す必要はなさそうですが、一応こちらのサイトの変更も加えてみることにしました。

ubuntu10.10でシャットダウンしても電源が切れないときの対処法:
http://nick.hateblo.jp/entry/20110115/1295089333
この記事書いているときに気付いたけど、 10.10の記事だね。

やはり上手くいかない。
そういえばこのOS入れたとき "Gnome サービスを起動する" が設定マネージャーで最初からチェックが入っていた事に驚きました。
なぜなら、以前入れていた 11.10 には チェックが入っていなかったからです。

チェックを外してみると・・・
シャットダウンできた。

Ubuntuフォーラムの変更を元に戻してみても上手くシャットダウン出来るので、どうやらGnomeサービスあたりが自分の場合、原因のようでした。