基础语法——类与对象
每一个类中必须要有构造函数,析构函数,复制赋值运算符函数
构造函数和析构函数
构造函数的名字和类名相同,构造函数没有返回类型。
析构函数的名字由"~"+"类名"构成。
类接口定义
class STRING{
char* pstr;
public:
STRING(const char* s="");
~STRING();
};
//构造函数
Person(int _age, int _height) : age(_age), height(_height){};
//构造函数
STRING(const char* s = "")
{
if(s == nullptr) //不特判是否是空指针也可,有些题也可以过
{
this->pstr = new char[1];
this->pstr[1] = '/0';
}
this->pstr = new char[strlen(s) + 1];
strcpy(this->pstr, s);
}
//析构函数
STRING :: ~STRING()
{
delete[] pstr;
}
复制构造函数(拷贝构造函数)
用已经存在的对象初始化新定义的对象要用复制构造函数
如果一个构造函数的第一个参数是自身类类型的引用,且其他参数都有默认值,则此构造函数就是复制构造函数
class STRING{
char* pstr;
public:
STRING(const char* s=""); //构造函数
STRING(const STRING& s); //复制构造函数
};
例:
类接口及定义
class STRING{
char* pstr;
public:
STRING(const char* s="");//已实现
~STRING();//已实现
STRING(const STRING& s);
friend ostream& operator<<(ostream& os, const STRING& s);//已实现
};
构造函数与复制构造函数
//构造函数
STRING::STRING(const char* s){
if(s == NULL){
pstr = new char[1];
pstr[0] = 0;
}else{
pstr = new char[strlen(s) + 1];
strcpy(pstr, s);
}
}
//复制构造函数
STRING :: STRING(const STRING& s)
{
pstr = new char[strlen(s.pstr) + 1];
strcpy(pstr, s.pstr);
}
复制赋值运算符函数
1、自我赋值检测
2、清理旧数据
3、更新对象的大小
4、分配新内存并赋值数据
类接口及定义
class Polynomial{
private:
double *coefficients; //动态数组,用来存储多项式各项系数
int size; //多项式的大小,项数,最高次项的幂为size-1
public:
Polynomial(int size=1); //已实现
Polynomial(double* coets, int size);//已实现
friend ostream& operator<<(ostream& os, const Polynomial& p); //已实现
~Polynomial(); //已实现
Polynomial(const Polynomial &poly); //已实现
Polynomial& operator=(const Polynomial& p);
};
Polynomial& Polynomial :: operator=(const Polynomial& p)
{
if(this == &p) //自我赋值检测
return *this;
delete[] this->coefficients; //清理旧数据
this->size = p.size;//更新对象的大小
this->coefficients = new double[this->size]; //分配新内存
for(int i = 0; i < this->size; i ++ )
this->coefficients[i] = p.coefficients[i]; //复制数据
return *this;
}
原文地址:https://blog.csdn.net/2301_76553467/article/details/139842568
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!