关于类的学习

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;
}

可恶!!这个世界多我一个学会类的人能咋样呢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值