1、重载构造函数&析构函数
#include <iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
class Date{
int year,month,day;
public:
Date():year(1900),month(1),day(1){}//无参构造函数
Date(int yy,int mm=1,int dd=1);//默认参数构造函数
Date(Date &d):year(d.year),month(d.month),day(d.day){}//日期对象构造函数
Date(char*ps);//字符串日期构造函数
void print_ymd();
//~Date(){cout<<"撤销日期对象\n";};//析构函数定义
~Date(){
static int i=1;
cout<<"撤销日期对象"<<i<<"\n";
i++;
};//析构函数定义以及显示一些内容
};
//默认参数构造函数定义
Date::Date(int yy,int mm,int dd):year(1900),month(1),day(1){
if(yy>=1900&yy<=9999){
year=yy;
}
else{
return;
}
if(mm>=1&&mm<=12){
month=mm;
}
else{
year=1900;
return;
}
if(dd>=1&&dd<=31){
day=dd;
}
else{
year=1900;
month=1;
return;
}
}
//日期类中重载构造函数 (指针指向一个字符串)
Date::Date(char*ps):year(1900),month(1),day(1){
char py[5],pm[3],pd[3];
strncpy(py,ps,4);//把ps中的4个字符拷贝到py
ps=ps+5;//ps后移5个字符,移到月份的第一个字符
strncpy(pm,ps,2);
ps=ps+3;
strncpy(pd,ps,2);
int yy=atoi(py),mm=atoi(pm),dd=atoi(pd);
if(yy>=1900&yy<=9999){
year=yy;
}
else{
return;
}
if(mm>=1&&mm<=12){
month=mm;
}
else{
year=1900;
return;
}
if(dd>=1&&dd<=31){
day=dd;
}
else{
year=1900;
month=1;
return;
}
}
void Date::print_ymd(){
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
int main(){
Date date1;//使用无参构造函数
cout<<"date1:";
date1.print_ymd();
Date date2(2006);//使用默认参数构造函数
cout<<"date2:";
date2.print_ymd();
Date date3(2006,4);//使用默认参数构造函数
cout<<"date3:";
date3.print_ymd();
Date date4(2006,4,8);//使用默认参数构造函数
cout<<"date4:";
date4.print_ymd();
Date date5(2006,14,8);//使用默认参数构造函数
cout<<"date5:";
date5.print_ymd();
Date date6(date4);//使用第三个构造函数
cout<<"date6:";
date6.print_ymd();
Date date7("2008-08-08");//使用第四个构造函数
cout<<"date7:";
date7.print_ymd();
}
2、对象与指针
举例1:
//Person persn1("zhangsan",19,'f');
//Person *ptr=&person1;
//ptr->ShowMe();
//动态存储:对象指针=new类名
//Person*p=new Person;
//delete p;
#include<iostream>
using namespace std;
class Date{
public:
int year,month,day;
void init(int y,int m,int d);
void ptint_ymd();
};
void Date::init(int yy,int mm,int dd){
year=yy;
month=mm;
day=dd;
}
void Date::ptint_ymd(){
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
int main(){
Date date1;
Date*p1=&date1;
p1->init(2006,5,13);
p1->ptint_ymd();
int*p2=&date1.year;
cout<<*p2<<endl;
void(Date::*p3)(int,int,int);//声明函数指针,p3只能指向Date类里的含参函数
void(Date::*p4)();//p4只能指向Date类里的无参函数
p3=&Date::init;
p4=&Date::ptint_ymd;
(date1.*p3)(2006,4,8);
(date1.*p4)();
return 0;
}
举例2: 关于怎么动态生成对象
声明两个指向对象的指针>动态生成一个对象>对象之间的赋值
#include<iostream>
#include<string.h>
using namespace std;
class Person{
private:
char Name[9];
char Sex;
int Age;
public:
Person(){
strcpy(Name,"XXX");
Age=0;
Sex=' ';
}
~Person(){
cout<<"Now destroying Person"<<endl;
}
void Resgister(char*name,int age,char sex);
void ShowMe();
};
void Person::Resgister(char*name,int age,char sex){
strcpy(Name,name);
Age=age;
Sex=sex;
}
void Person::ShowMe(){
cout<<Name<<'\t'<<Age<<'\t'<<Sex<<endl;
}
int main(){
Person*p1,*p2;
p1=new Person;
cout<<"person1:\t";
p1->ShowMe();
p1->Resgister("zhangsan",19,'m');
cout<<"person1:\t";
p1->ShowMe();
p2=new Person;
cout<<"person2:\t";
p2->ShowMe();
*p2=*p1;
cout<<"person2:\t";
p2->ShowMe();
delete p1;
delete p2;
return 0;
}
可恶!!这个世界多我一个学会类的人能咋样呢!