catchの使用方法

#include < iostream >
using namespace std;

void Xhandler(int test)
{
    try{
        if(test==0) throw test;
        if(test==1) throw 'a';
        if(test==2) throw 123.23;
    }
    
    catch(...){
        cout << "get!\n";
    }
}

int main()
{
    cout << "start\n";
    Xhandler(0);
    Xhandler(1);
    Xhandler(2);
    cout << "finish";
    
    return 0;
}

catchの例外処理

#include < iostream >
using namespace std;

int main()
{
    cout << "start\n";
    
    try {
        cout << "try block internal\n";
        throw 10;
        cout << "this is not action";
    }
    
    catch (int i){
        cout << "get! number is : ";
        cout << i << "\n";
    }
    
    cout << "finish";
    
    return 0;
}

複数の汎用データ型の定義

#include < iostream >
using namespace std;

template  class myclass
{
    Type1 i;
    Type2 j;
public:
    myclass(Type1 a, Type2 b) { i = a; j = b; }
    void show() { cout << i << ' ' << j << '\n'; }
};

int main()
{
    myclass ob1(10, 0.23);
    myclass ob2('X', "This is a test");
    
    ob1.show();
    ob2.show();
    
    return 0;
}

ランダムなイベントに対する仮想関数

#include < iostream >
#include < cstdlib >
using namespace std;

class base {
public:
    int i;
    base(int x){ i = x; }
    virtual void func()
    {
        cout << "use base func(): ";
        cout << i << '\n';
    }
};

class derived1 : public base {
public:
    derived1(int x) : base(x) {}
    void func()
    {
        cout << "use derived 1 func(): ";
        cout << i*i << '\n';
    }
};

class derived2 : public base {
public:
    derived2(int x) : base(x) {}
    void func()
    {
        cout << "use derived2 func() : ";
        cout << i+i << '\n';
    }
};

int main()
{
    base *p;
    derived1 d_ob1(10);
    derived2 d_ob2(10);
    int i, j;
    
    for(i=0; i<10; i++){
        j = rand();
        if((j%2)) p = &d_ob1;
        else p = &d_ob2;
        p->func();
    }
    return 0;
}

派生クラスへのポインタ

#include < iostream >
using namespace std;

class base {
    int x;
public:
    void setx(int i){ x = i; }
    int getx() { return x; }
};

class derived : public base {
    int y;
public:
    void sety(int i){ y = i; }
    int gety() { return y; }
};

int main()
{
    base *p;
    base b_ob;
    derived d_ob;
    
    p = &b_ob;
    p->setx(10);
    cout << "base class object x: " << p->getx() << '\n';
    
    p = &d_ob;
    p->setx(99);
    
    d_ob.sety(88);
    cout << "derived class object x: " << p->getx() << '\n';
    cout << "derived class object y: " << d_ob.gety() << '\n';
    
    return 0;
}

write()

#include < iostream >
#include < fstream >
#include < cstring >
using namespace std;

int main()
{
    ofstream out("test", ios::out||ios::binary);
    
    if(!out) {
        cout << "can not open output file\n";
        return 1;
    }
    
    double num = 100.45;
    char str[] = "this is a test";
    
    out.write((char *) &num, sizeof(double));
    out.write(str, strlen(str));
    
    out.close();
    
    return 0;
}

ディスク入出力

#include < iostream >
#include < fstream >
using namespace std;

int main(int argc, char *argv[])
{
    if(argc!=2){
        cout << "use: WRITE\n";
        
        return 1;
    }
    ofstream out(argv[1]);
    
    if(!out){
        cout << "cannot open input file\n";
        return 1;
    }
    
    char str[80];
    cout << "write char in disk and stop $\n";
    
    do {
        cout << ": ";
        cin >> str;
        out << str << endl;
    } while (*str != '$');
    
    out.close();
    return 0;
}

独自マニュプレーター

setup()というマニュプレータ

#include < iostream >
using namespace std;

ostream &setup(ostream &stream)
{
    stream.width(10);
    stream.precision(4);
    stream.fill('*');
    
    return stream;
}

int main()
{
    cout << setup << 123.123456;
    
    return 0;
}

抽出子の作成

#include < iostream >
using namespace std;

class coord {
    int x, y;
public:
    coord() { x = 0; y = 0; }
    coord(int i, int j){ x = i; y = j; }
    friend ostream &operator<<(ostream &stream, coord ob);
    friend istream &operator>>(istream &stream, coord &ob);
};

ostream &operator<<(ostream &stream, coord ob)
{
    stream << ob.x << ", " << ob.y << '\n';
    return stream;
}

istream &operator>>(istream &stream, coord &ob)
{
    cout << "input polar: ";
    stream >> ob.x >> ob.y;
    return stream;
}

int main()
{
    coord a(1, 1), b(10, 23);
    
    cout << a << b;
    cin >> a;
    cout << a;
    
    return 0;
}

独自挿入子の作成

#include < iostream >
using namespace std;

class coord {
    int x, y;
public:
    coord() { x = 0; y = 0; }
    coord(int i, int j){ x= i; y = j; }
    friend ostream &operator<<(ostream &stream, coord ob);
};

ostream &operator<<(ostream &stream, coord ob)
{
    stream << ob.x << ", " << ob.y << '\n';
    return stream;
}
int main()
{
    coord a(1, 1), b(10, 23);
    cout << a << b;
    
    return 0;
}