面向对象
- 构造函数
- 析构函数
- 拷贝构造
- 等号运算符重载
- 静态成员和静态成员方法
#include<iostream>
#include<vld.h>
using namespace std;
int school = 985;
class Person
{
private:
char* _name;
int _age;
int _sex;
const int _id;
int& _school;
static int _n;
public:
static int _num;
Person()
:_id(1),_school(school)
{
_num++;
}
Person(const char* name, int age, int sex)
:_id(1), _school(school)
{
_name = new char[strlen(name) + 1];
for (int i = 0; i <= (int)strlen(name); i++)
{
_name[i] = name[i];
}
_age = age;
_sex = sex;
_num++;
}
Person(const Person& src)
:_id(1), _school(school)
{
_name = new char[strlen(src._name) + 1];
for (int i = 0; i <= (int)strlen(src._name); i++)
{
_name[i] = src._name[i];
}
_age = src._age;
_sex = src._sex;
_num++;
}
Person& operator=(const Person& src)
{
if (&src != this)
{
delete[]_name;
_name = new char[strlen(src._name) + 1];
for (int i = 0; i <= (int)strlen(src._name); i++)
{
_name[i] = src._name[i];
}
_age = src._age;
_sex = src._sex;
}
return *this;
}
void Eat()const
{
cout <<_name<< ": eat ……" << endl;
}
void Walk()const
{
cout <<_name<< ": walk ……" << endl;
}
void Show()const
{
cout << _name << ", " << _age << ", " << _sex << endl;
}
char* Get_name()
{
return _name;
}
const char* Get_name()const
{
return _name;
}
static int Get_n()
{
return _n;
}
~Person()
{
delete[]_name;
_num--;
}
};
int Person::_num = 0;
int Person::_n = 0;
int main()
{
Person per("zhangsan", 23, 1);
per.Eat();
per.Walk();
per.Show();
Person per1 = per;
per1.Show();
per = per1;
Person per2;
per2 = per;
per = per;
per1 = per2 = per;
cout << Person::_num << endl;
cout << per._num << endl;
cout << Person::Get_n() << endl;
cout << per.Get_n() << endl;
const Person per3("lisi", 22, 1);
per3.Show();
return 0;
}
单例模式
class Only
{
public:
static Only* Get_Only()
{
if (NULL == _Only)
{
_Only = new Only();
}
return _Only;
}
private:
static Only* _Only;
Only()
{
}
};
Only* Only::_Only = NULL;