#include "D:\C++WORK\main.h"
/*
class Employee//Employee定义【1】
{
Employee():name("noname"),id(counter)
{
++counter;//使用counter原来的初始值,初始化,创建的新对象
//然后对counter进行++
}
Employee(string nm):name(nm),id(counter)
{
++counter;
}
Employee(const Employee & other):name(other.name),id(counter)//不要这么写id(other.id)
{
++counter;
}
Employee& operator=(Employee & rhe)
{
name=rhe.name;
return *this;
}
private:
string name;
static int counter;//唯一的一个雇员标识符的初始数值。
//int counter;如果这里这么进行定义,编译器会显示重复定义 int counter
int id;//唯一的一个雇员标识符,使用counter这个静态数值进行初始化
};
int Employee::counter=1;
*/
class Employee//Employee定义【2】
{
public:
Employee():name("noname")
{
SetId();
}
Employee(string nm):name(nm)
{
SetId();
}
Employee(const Employee & other):name(other.name)
{
SetId();
}
Employee & operator=(const Employee & rhe)
{
this->name=rhe.name;
return *this;
}
void get_id(const Employee & e)
{
cout<<e.id<<endl;
}
private:
string name;
static int counter;
string id;
private:
void SetId()
{
id="Empl-";
if (counter<10)
{
id=id+"000";
}
else if (counter<100)
{
id=id+"00";
}
else if(counter<10)
{
id=id+"0";
}
else
{
cerr<<"非有效的ID"<<endl;
}
char buffer[5];
_itoa(counter,buffer,10);
id=id+buffer;
++counter;
}
};
int Employee::counter=1;
int main()
{
Employee e1("yang");
e1.get_id(e1);
return 0;
}
#include "D:\C++WORK\main.h"//智能指针的定义的示例程序
class U_Ptr//这个类是一个计数类。
{
private://我们不希望普通用户使用U_Ptr这个类,所有没有任何的public成员。
friend class HasPtr;
int * ip;
size_t use;
U_Ptr(int *p):ip(p),use(1) { }
~U_Ptr() { delete ip ; }
};
class HasPtr
{
private:
U_Ptr *ptr;
int val;
public:
HasPtr(int *p,int i):ptr(new U_Ptr(p)),val(i) { }
HasPtr(const HasPtr &orig):ptr(orig.ptr),val(orig.val)
{
++ptr->use;
}
HasPtr & operator=(const HasPtr &);
~HasPtr(){ if(--ptr->use==0) delete ptr;}
public:
int * get_ptr()const { return ptr->ip;}
int get_int() const { return val ;}
void set_ptr(int * p){ ptr->ip=p;}
void set_int(int i) {val =i;}
int get_ptr_val()const { return *ptr->ip ;}
void set_ptr_val(int i) {*ptr->ip=i;}
};
//因为赋值操作符比较复杂,所以不想用作inline函数
HasPtr & HasPtr::operator=(const HasPtr & rhs)
{//operator=作为成员函数只有一个形参
++rhs.ptr->use;
if (--ptr->use==0)
{
delete ptr;
}
ptr = rhs.ptr;
val = rhs.val;
return * this;
}
int main()
{
return 0;
}