備忘録も兼ねて

授業でブートストラップを用いたHTMLを習いまして、
いろいろと調べているうちにホームページを作りたいなというところに達しました。

身内だけで楽しむのもアレだし、どうせ作るなら金になるものがいいというところまで達しています。


そこで、どんなページを作ろうかと考えた時に、誰もが楽しめるページだなと。

個人的に大喜利が好きなんですけど、これって人を選ぶじゃないですか。
有名なところでボケてがありますしね。なんか発想がパクり。
それに誰しもが楽しめるわけではない。


誰もが楽しめるっていうことで、「人間の習性」に着目します。はい。
人間の生物的なところで考えていくと、需要がなくならないような気がしたんです。

例えば性行為とか極端な例ですが、生物学的には誰しもが好むことですよね(何言ってんだ
エロいじゃないですか、人って。※個人差あります

かといってアダルトサイトって男性にしか需要ないんですよね。不思議ですよね。


とまぁ、そんなアホみたいなこと考えて過ごしています最近。


誰もが楽しめるサイトっていうかアプリっていうかを探してみると身近にありました。
Twitter Facebook instagram

なんとなく法則性が見えてきました。そうです。
自分のことを話すってのが誰しもが好きなところなんです!!

Facebookとか、見ているとしょうもないですよね?(何言ってんだpart2
Twitterもinstagramもしょうもない。

でも、需要がなくならないのは、みんな自分のことをアピールしたくてたまらないんですよね。


そこに注目して私が考えたサイトがコレです!!

「tellmyself(仮)」
http://tksn0.web.fc2.com/index.html


instagramみたいなオシャレな造語を作ろうとして失敗した例がこちらです。
でも語呂はいいですよね。テルマイセルフ。うん。

概要としては自分のことを語るホームページです。
まだ未完成です。

お題「夏祭り」
とかで、お題に即した出来事を自分語りしてもらうって雰囲気かな。

正直、公開するまで時間と労力がかかると思うんですが、
自分よりスキルのある人がこのアイデア持ってちゃって公開されると非常に困ります(笑)

自分のモチベを上げる意味でも積極的に晒あげていきますけどね。

んで、まだこれからやるべきことはたくさんあり・・・
ページ構成でまだまだCSSやらJavascriptやらBootstrapを学ぶ必要がありますね。

ユーザー投稿型にしたいので、データベースも必要です。
dotinstallでmysqlについて学びたいとも思っています。

あとは、検索機能とか、PV数が多い話をトップに持って来たり、
報酬なんかも必要かな。考えるとキリがないね。

あと、お金を稼ぐ意味ではアフェリエイトにも挑戦しようかなと。
人気の話をまとめてYouTubeにアップするのもアリ。
Youtuberじゃないけど、そういう方法でお金を稼ぐこともできますね。

すごい人間味のあふれた記事になってしまいました。今日はこの辺にします。。

ちなみに自分を語ることって性行為と同等の快楽が得られるらしいですよ!
結局、みんなエロいじゃねぇか!

いつも3日坊主の私ですが、珍しく8回目の更新になります。

独習C++、やさしいC++、ウェブサイトと、

いろいろ飛んで勉強しているので、話題が前後したりします。

 

今回はコンストラクタと静的メンバの仕組みについて。

 

**コンストラクタ

オブジェクトの作成時に自動的に宣言されるもの。

返り値をもたないのも特徴の1つでしょう。

 

**静的メンバ

staticですね。グローバル関数扱いできるというやつでした。

ローカル関数と違って、そのクラス自体に紐づけられるので、

値がリセットされたり、オブジェクトによって変わることがない共通のものって感じですかね。

 

 

今回のプログラムは、

オブジェクト作成時にコンストラクタが呼び出されて初期化

⇒ setCarで値をセット(ナンバーとガソリン量)

⇒ staticでsumをもつ。オブジェクトができる毎に増えていく

 

クラス類の説明って車を例にすることが多いですよね。

分かりやすいからかね。

 

 

#include <iostream>

using namespace std;

class Car{
private:
    int num;
    double gas;
public:
    static int sum;
    Car();
    void setCar(int n, double g);
    void show();
    static void showSum();
};

Car::Car()
{
    num=0;
    gas=0.0;
    sum++;
    cout << "車を作成しました。" << endl;
}

void Car::setCar(int n, double g)
{
    num=n;
    gas=g;
    cout << "ナンバーを" << num << "に、ガソリン量を" << gas << "にしました。" << endl;
}

void Car::showSum()
{
    cout << "車は全部で" << sum << "台あります。" << endl;
}

void Car::show()
{
    cout << "車のナンバーは" << num << "です。" << endl;
    cout << "ガソリン量は" << gas << "です。" << endl;
}

int Car::sum=0;

int main()
{
    Car::showSum();

    Car car1;
    car1.setCar(1234,20.5);

    Car::showSum();

    Car car2;
    car2.setCar(4567,30.5);

    Car::showSum();

    return 0;
}

 

実行結果は、車の台数が0,1,2と増えていきます。

ただstatic関数はクラスに紐づけられているため、

特定のオブジェクトに関連したメンバにアクセスすることはできませーん。

 

 

はい。以上!

卒論発表練習やんねーと。

更新が1日おきになってるな・・・。

勉強は毎日してるんだけどね。

ま、そんな言い訳はよくて、苦手分野であることが発覚した文字列行きましょう。今日は。

 

「独習C++」の第1章理解度チェックにもあった、

関数のオーバーロード兼文字列を逆順に返す関数を作成します。

 

char s1[80], s2[80];

strcpy(s1,"hello");

rev_str(s1,s2); // 逆順にした文字列をs2に格納

rev_str(s1); //逆順にした文字列をs1に返す

 

これが前提条件どす。

もう分からなくなって答えみちゃった(笑)

終了するために'\0'とNULL文字を加えるところで詰んでました。

この1文ないだけで、出力が↓こうなって恐怖でした。

 

#include <iostream>

using namespace std;

void rev_str(char *s1);
void rev_str(char *s1, char *s2);

int main()
{
    char s1[80], s2[80];

    strcpy(s1,"hello world");

    rev_str(s1);
    rev_str(s1,s2);

    return 0;
}

void rev_str(char *s1)
{
    char tmp[80];
    int i,j;
    for(i=strlen(s1)-1,j=0;i>=0;i--,j++){
        tmp[j]=s1[i];
    }
    tmp[j]='\0';

    cout << tmp << endl;
}

void rev_str(char *s1, char *s2)
{
    int i,j;
    for(i=strlen(s1)-1, j=0; i>=0; i--, j++){
        s2[j]=s1[i];
    }
    s2[j]='\0';
    
    cout << s2 << endl;

}

 

文字列の復習にも時間を費やさなければ。

はい。以上!

iOSアプリ開発をしてる友達2人組がいるんですが、

彼らがアプリを作る理由は「モテたいから」だそうです。

 

なんか、かっこいいなと思ってしまったのは置いといて今日はクラスです。

 

オブジェクト指向言語ならではの機能じゃないでしょうか。

「やさしいC++」の12章練習問題からピックアップしてきました。

 

x,y座標を指定するプログラムです。

クラス(設計図)では、

座標x,y ・・・ ともに0~10で設定し、それを超える場合は0に

ほかのメンバ関数では、座標の設定(set)と、座標の獲得(get)です。

 

class Point{
private:
    int x;
    int y;
public:
    void setX(int a);
    void setY(int b);
    int getX(){return x;}
    int getY(){return y;}
};

void Point::setX(int a)
{
    if(a>=0 && a<=10){
        x=a;
    }else{
        x=0;
    }
}

void Point::setY(int b)
{
    if(b>=0 && b<=10)
        y=b;
    else
        y=0;
}

 

private関数に座標を指定することで、外部からの下手な操作の影響を受けないようにカプセル化しています。(オブジェクト指向ならでは??)

そのため、privateをいじるには、同じクラスに指定されているメンバ関数を経由する必要があります。

 

次にメイン関数です。

int main()
{
    Point p;
    int x, y;

    cout << "X座標を入力してください。" << endl;
    cin >> x;
    p.setX(x);

    cout << "Y座標を入力してください。" << endl;
    cin >> y;
    p.setY(y);

    cout << "座標は(" << p.getX() << "," << p.getY() << ")です。" << endl;


    return 0;
}

set関数でprivateにアクセスして、

get関数でprivateから値を拾ってきています。

 

 

個人的に、publicと比較して手間がすごいなと思ったんですが。

特に、cin>>x;からのp.set(x);これ。

cin>>から直接渡したいのにそれはできないのか。

まぁ、この手間を覆すほどの見返りはあると思いますが、まだ腑に落ちない部分です。

 

今後、クラスを多様していけば見方が変わるのだろうか。

 

はい。以上です。


プログラマたるものメモリの扱いには注意しろ とか、
メモリ考えずにプログラミングしてるやつ見ると腹立つ とか、
なんか、周りでよくそんなことを気にしますが・・・。

 

あんま気にしたことないんだよなぁ。

でも大型のプログラムになってくると避けては通れない道です。

研究でディープニューラルネットワークを扱っているんですが、

メモリ確保がうまくいかないと「セグメント例外」とかいう悪魔のメッセージを吐き出しますね。

 

じゃあ早速やってみます。

簡単に、人数分を聞いてテストの点数を入力し、出力するだけのプログラムです。

メモリの確保はnewを、解放はdeleteを使います。

 

int main(void)
{
    int num;
    int* pT;

    cout << "何人のテストの点数を入力しますか?" << endl;
    cin >> num;

    pT=new int[num];

    cout << "人数分の点数を入力してください。" << endl;

    for(int i=0;i<num;i++){
        cin >> pT[i];
    }

    for(int j=0;j<num;j++){
        cout << j+1 << "番目の人の点数は" << pT[j] << "です。" << endl;
    }

    delete[] pT;

    return 0;

}

 

int* pTでポインタを作成し、

pT=new int[num]

でnum分のメモリを配列で確保します。

あとは配列の扱いですね。

 

最後には

delete[] pT

と解放するのを忘れないようにしましょう。

はい。以上です。