#include<iostream>
#include<cstring>
using namespace std;
class aircondition
{public:
char *brand;//char *定义的与其说是一种指针,不如说他是定义的一个变量;具体见底部
string color;//颜色
string power;
string condition;
double temperature;
aircondition()=default;
aircondition(const aircondition &p);
aircondition(char *brand1,const string &color1,const string &power1,const string &condition1,double temperature1):brand(brand1),color(color1),power(power1),condition(condition1),temperature(temperature1){}
aircondition& operator=(const aircondition &f);
void condition1();
void temprature2();
~aircondition();
};
aircondition::~aircondition()//析构函数
{cout<<"品牌:"<<brand<<endl;
cout<<"颜色:"<<color<<endl;
cout<<"状态:"<<condition<<endl;
cout<<"温度:"<<temperature<<"℃"<<endl;
cout<<endl;
delete []brand;
}
aircondition& aircondition::operator=(const aircondition &f)//赋值函数
{color=f.color;
condition=f.condition;
temperature=f.temperature;
power=f.power;
brand=new char[strlen(f.brand)+1];
strcpy(brand,f.brand);
}
void aircondition::temprature2()//变换温度
{cout<<"你想1、升温2、降温"<<endl;
double c;
cin>>c;
if(c==1)
{cout<<"升温到多少度"<<endl;
double t;
cin>>t;
temperature=t;}
if(c==2)
{cout<<"降温到多少度"<<endl;
double t;
cin>>t;
temperature=t;
}}
void aircondition::condition1()//变换状态
{double t=2;
if(t==2)
cout<<"空调已打开"<<endl;
condition="空调已打开";
}
aircondition::aircondition(const aircondition &p)//复制函数
{brand=new char(strlen(p.brand)+1);
strcpy(brand,p.brand);
color=p.color;
power=p.power;
temperature=p.temperature;
condition=p.condition;
}
int main()
{aircondition p1("格力","贵族金","2匹","开",25);
p1.condition1();
p1.temprature2();
aircondition p2=p1;
aircondition p3;
p3=p2;
return 0;
}
注意char*:
1、char *n="123";
cout<<n;//n输出123
总结:这里的n不是一个存放地址的指针,而是一个变量,一个拥有临时内存单元的变量,且它可以存放字符串;char*是一个整体(与string相似),而n单独是一个整体;切记:这里的*n不是一个整体
2、char*n="123";
cout<<*n;//*n输出1
总结:通过这个可以更加确定char*是一个整体,n单独是一个整体;如果误认为n是指针,然后将*n认为是一个整体去输出,这就会导致输出不完整,就比如这里只输出了一个1;(因为编译器误认为你这里是定义的一个char型的指针,而这里的char*你并不是想把他定义为指针并)
3、char *n; 等同于char *n[];
cout<<*n; 等同于cout(n+0);
cout<<n; 等同于cout n[];
4、
因为char *具有临时内存单元,所以一般单独给一个cha* 定义的变量赋值字符串时不用给他分配内存单元,但如果是多个char* 变量相互赋值则需要为他们分配内存单元(第一个char* 定义的变量不用),因为毕竟char*始终只是临时内存单元,还是很容易丢失的(可以用strlen()计算字符串长度,不包括/0)
5、
char *定义的变量不能直接用=进行赋值,必须用strcpy()进行复制;