#includeusing namespace std; class samp { int a; public: samp(int n){ a = n; } int get_a() { return a; } }; int main() { samp ob[4] = { -1, -2, -3, -4 }; int i; for(i=0; i<4; i++) cout << ob[i].get_a() << ' '; cout << "\n"; return 0; }
オブジェクトの配列
オブジェクトは変数であり、他の型の変数と同じ機能と属性を持っています。
#include < iostream > using namespace std; class samp { int a; public: void set_a(int n) { a = n; } int get_a() { return a; } }; int main() { samp ob[4]; int i; for(i=0; i<4; i++) ob[i].set_a(i); for(i=0; i<4; i++) cout << ob[i].get_a(); cout << "\n"; return 0; }
フレンド関数
二つの異なる型のクラスが共通の特性を持っているとき、それを比較する。
#include < iostream > using namespace std; class truck; class car { int passengers; int speed; public: car(int p, int s){ passengers = p; speed = s; } friend int sp_greater(car c, truck t); }; class truck { int weight; int speed; public: truck(int w, int s){ weight = w, speed = s; } friend int sp_greater(car c, truck t); }; int sp_greater(car c, truck t) { return c.speed - t.speed; } int main() { int t; car c1(6, 55), c2(2, 120); truck t1(10000, 55), t2(20000, 72); cout << "c1 and t1 compare:\n"; t = sp_greater(c1, t1); if(t<0) cout << "truck is faster\n"; else if(t==0) cout << "car and truck speed is same\n"; else cout << "car is faster\n"; cout << "\nc2 and t2 compare:\n"; t = sp_greater(c2, t2); if(t<0) cout << "truck is faster\n"; else if(t==0) cout << "car and truck speed is same\n"; else cout << "car is faster\n"; return 0; }
フレンド関数
関数からそのクラスの非公開メンバにアクセスしたいとき。
#include < iostream > using namespace std; class myclass { int n, d; public: myclass(int i, int j){ n = i; d = j; } friend int isfactor(myclass ob); }; int isfactor(myclass ob) { if(!(ob.n % ob.d)) return 1; else return 0; } int main() { myclass ob1(10, 2), ob2(13, 3); if(isfactor(ob1)) cout << "2 is 10 factor\n"; else cout << "2 is not 10 factor \n"; if(isfactor(ob2)) cout << "3 is 13 factor \n"; else cout << "3 is not 13 factor \n"; return 0; }
オブジェクト返し
#include < iostream > #include < cstring > using namespace std; class samp{ char s[80]; public: void show() { cout << s << "\n"; } void set(char *str) { strcpy(s, str); } }; samp input() { char s[80]; samp str; cout << "type character: "; cin >> s; str.set(s); return str; } int main() { samp ob; ob = input(); ob.show(); return 0; }
オブジェクトのコピー
オブジェクトのコピーを作成すると、コンストラクタ関数は呼び出されません。
#include < iostream > using namespace std; class samp { int i; public: samp(int n ){ i = n; cout << "call contractor \n"; } ~samp() { cout << "call destroctor\n"; } int get_i() { return i; } }; int sqr_it(samp o) { return o.get_i() * o.get_i(); } int main() { samp a(10); cout << sqr_it(a) << "\n"; return 0; }
関数へのオブジェクトの引き渡し
オブジェクトがpass by valueによって関数に渡されます。
#include < iostream > using namespace std; class samp{ int i; public: samp(int n){ i = n; } int get_i() { return i; } }; int sqr_it(samp o) { return o.get_i() * o.get_i(); } int main() { samp a(10), b(2); cout << sqr_it(a) << "\n"; cout << sqr_it(b) << "\n"; return 0; }
stackプログラム
1つのオブジェクトのすべてのデータメンバがもう1つのオブジェクトに代入されます。
#include < iostream >
using namespace std;#define SIZE 10
class stack {
char stck[SIZE];
int tos;
public:
stack();
void push(char ch);
char pop();
};stack::stack()
{
cout << "creat stack\n"; tos = 0; } void stack::push(char ch) { if(tos==SIZE){ cout << "stack is full\n"; return; } stck[tos] = ch; tos++; } char stack::pop() { if(tos==0){ cout << "stack is empty\n"; return 0; } tos--; return stck[tos]; } int main() { stack s1, s2; int i; s1.push('a'); s1.push('b'); s1.push('c'); s2 = s1; for(i=0; i < 3; i++) cout << "pop s1: " << s1.pop() << "\n"; for(i=0; i < 3; i++) cout << "pop s2: " << s2.pop() << "\n"; return 0; }
オブジェクトの代入
型が同じであれば、1つのオブジェクトをもう1つのオブジェクトに代入することができます。
#includeusing namespace std; class myclass { int a, b; public: void set(int i, int j){ a = i; b = j; } void show() { cout << a << ' ' << b << '\n'; } }; int main() { myclass o1, o2; o1.set(10, 4); o2 = o1; o1.show(); o2.show(); return 0; }
オーバーロード関数のインライン化
各関数はinlineを使用して宣言。
#include < iostream > using namespace std; inline int min(int a, int b) { return a < b ? a: b; } inline long min(long a, long b) { return a < b ? a : b; } inline double min(double a, double b) { return a < b ? a : b; } int main() { cout << min(-10, 10) << "\n"; cout << min(-10.01, 100.002) << "\n"; cout << min(-10L, 12L) << "\n"; return 0; }