自学内容网 自学内容网

基础语法——类与对象

每一个类中必须要有构造函数,析构函数,复制赋值运算符函数

构造函数和析构函数
构造函数的名字和类名相同,构造函数没有返回类型。

析构函数的名字由"~"+"类名"构成。

类接口定义

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)!