//--《C++捷径教程》读书笔记--Chapter 12--类的深入学习(完结)
//--Chapter 12--类的深入学习
//--04/12/2006 Wed.
//--Computer Lab
//--Liwei
//--程序#4 使用重载构造函数
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
class timer{
int seconds;
public:
timer(char *t) { seconds=atoi(t); }
timer(int t) { seconds=t; }
timer(int min,int sec) { seconds=min*60+sec; }
void run();
};
void timer::run()
{
clock_t tl;
tl=clock();
while( (clock()/CLOCKS_PER_SEC-tl/CLOCKS_PER_SEC)<seconds );
cout<<"/a";
}
int main()
{
timer a(10), b("20"), c(0,3);
a.run();
b.run();
c.run();
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#5 说明动态初始化得用法
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
class timer{
int seconds;
public:
timer(char *t) { seconds=atoi(t); }
timer(int t) { seconds=t; }
timer(int min,int sec) { seconds=min*60+sec; }
void run();
};
void timer::run()
{
clock_t tl;
tl=clock();
while( (clock()/CLOCKS_PER_SEC-tl/CLOCKS_PER_SEC)<seconds );
cout<<"/a";
}
int main()
{
timer a(10);
a.run();
cout<<"Enter number of seconds: ";
char str[80];
cin>>str;
timer b(str);
b.run();
cout<<"Enter min and sec: ";
int min,sec;
cin>>min>>sec;
timer c(min,sec);
c.run();
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#6 说明对象赋值
#include <iostream>
using namespace std;
class myclass{
int a,b;
public:
void setab(int i,int j) {a=i; b=j;}
void showab();
};
void myclass::showab()
{
cout<<"a is "<<a<<'/n';
cout<<"b os "<<b<<'/n';
}
int main()
{
myclass ob1,ob2;
ob1.setab(10,20);
ob2.setab(0,0);
cout<<"ob1 before assignment: /n";
ob1.showab();
cout<<"ob2 before assignment: /n";
ob2.showab();
cout<<'/n';
ob2=ob1;
cout<<"ob1 after assignment:/n";
ob1.showab();
cout<<"ob2 after assignment:/n";
ob2.showab();
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#7 说明对象作为参数传递
#include <iostream>
using namespace std;
class OBJ{
int i;
public:
void set_i(int x) { i=x; }
void out_i() { cout<<i<<" "; }
};
void f(OBJ x)
{
x.out_i();
x.set_i(100);
x.out_i();
}
int main()
{
OBJ o;
o.set_i(10);
f(o);
o.out_i();
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#8 说明构造、析构、对象传递
#include <iostream>
using namespace std;
class myclass{
int val;
public:
myclass(int i) { val=i; cout<<"Constructing./n";}
~myclass() { cout<<"Destructing./n"; }
int getval() { return val;}
};
void display(myclass ob)
{
cout<<ob.getval()<<'/n';
}
int main()
{
myclass a(10);
display(a);
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#9 说明对象传递时得问题
#include <iostream>
#include <cstdlib>
using namespace std;
class myclass{
int *p;
public:
myclass(int i);
~myclass();
int getval() { return *p; }
};
myclass::myclass(int i)
{
cout<<"allocating p./n";
p=new int;
*p=i;
}
myclass::~myclass()
{
cout<<"freeint p./n";
delete p;
}
void display(myclass ob)
{
cout<<ob.getval()<<'/n';
}
int main()
{
myclass a(10);
display(a);
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#10 说明对象传递时得问题
#include <iostream>
#include <cstdlib>
using namespace std;
class myclass{
int *p;
public:
myclass(int i);
~myclass();
int getval() { return *p; }
};
myclass::myclass(int i)
{
cout<<"allocating p./n";
p=new int;
*p=i;
}
myclass::~myclass()
{
cout<<"freeint p./n";
delete p;
}
void display(myclass &ob)
{
cout<<ob.getval()<<'/n';
}
int main()
{
myclass a(10);
display(a);
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#11 说明返回对象
#include <iostream>
#include <cstring>
using namespace std;
class sample{
char s[80];
public:
void show() { cout<<s<<'/n'; }
void set(char *str) { strcpy(s,str); }
};
sample input()
{
char instr[80];
sample str;
cout<<"Enter a string: ";
cin>>instr;
str.set(instr);
return str;
}
int main()
{
sample ob;
ob=input();
ob.show();
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#12 说明返回对象
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class sample{
char *s;
public:
sample() { s=0; }
~sample()
{ //if(s) delete []s;
cout<<"Freeing s./n"; }
void show() { cout<<s<<'/n'; }
void set(char *str);
};
void sample::set(char *str)
{
s=new char[strlen(str)+1];
strcpy(s,str);
}
sample input()
{
char instr[80];
sample str;
cout<<"Enter a string: ";
cin>>instr;
str.set(instr);
return str;
}
int main()
{
sample ob;
ob=input();
ob.show();
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#13 说明复制构造函数
#include <iostream>
#include <cstdlib>
using namespace std;
class myclass{
int *p;
public:
myclass(int i);
myclass(const myclass &ob);
~myclass();
int getval() { return *p; }
};
myclass::myclass(const myclass &ob)
{
p=new int;
*p=*ob.p;
cout<<"Copy constructor called./n";
}
myclass::myclass(int i)
{
cout<<"Allocating p./n";
p=new int;
*p=i;
}
myclass::~myclass()
{
cout<<"Freeing p./n";
delete p;
}
void display(myclass ob)
{
cout<<ob.getval()<<'/n';
}
int main()
{
myclass a(10);
display(a);
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#14 说明复制构造函数
#include <iostream>
#include <cstdlib>
using namespace std;
class myclass{
int *p;
public:
myclass(int i);
myclass(const myclass &ob);
~myclass();
int getval() { return *p; }
};
myclass::myclass(const myclass &ob)
{
p=new int;
*p=*ob.p;
cout<<"Copy constructor called./n";
}
myclass::myclass(int i)
{
cout<<"Allocating p./n";
p=new int;
*p=i;
}
myclass::~myclass()
{
cout<<"Freeing p./n";
delete p;
}
int main()
{
myclass a(10);
myclass b=a;
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#15 说明复制构造函数
#include <iostream>
using namespace std;
class myclass{
public:
myclass() { cout<<"Normal constructor./n"; }
myclass(const myclass &obj) { cout<<"Copy constructor./n"; }
};
myclass f()
{
myclass ob;
return ob;
}
int main()
{
myclass a;
a=f();
return 0;
}
//=================================================================//
// END //
//=================================================================//
//--程序#16 说明this
#include <iostream>
using namespace std;
class cl{
int i;
public:
void load_i(int val) { this->i=val; }
int get_i() { return this->i; }
};
int main()
{
cl o;
o.load_i(111);
cout<<o.get_i()<<endl;
return 0;
}
//=================================================================//
// END //
//=================================================================//