c++day4 ——homework

1.思维导图

2. 整理类中特殊成员函数:构造函数,析构函数,拷贝构造函数,拷贝赋值函数的使用和实现

特殊成员函数的使用和实现:
①	构造函数
功能:当使用类实例化对象时,给类对象初始化空间以及初始化使用
格式:函数名与类同名
没有返回值
可以有参和无参(可以重载)
格式:类名(形参列表){函数体内容}
一般为公有权限
调用时机:使用类进行实例化对象时,系统自动调用,无需手动调用
栈区:实例化类对象时,自动调用构造函数
堆区:定义类指针时,不调用构造函数,在使用new申请空间时才调用构造函数

必须使用初始化列表的情况:
A.	当构造函数的形参名和成员变量名同名时,可以用初始化列表解决,在函数体内,用this指针解决冲突
B.	当有常成员变量时,对该变量的初始化工作,必须放在初始化列表中,不能放到函数体内
C.	当有引用成员变量时,对该成员初始化
D.	当类中有其他类的成员子对象时,对该成员的初始化,也必须在初始化列表中显性调用其构造函数完成
②	析构函数
功能;当对象消亡时,用于回收对象的内存空间以及善后工作的
格式:函数名:类名前加~
		没有返回值
没有参数(没有重载,一个类中只能有一个析构函数)
		访问权限:一般为公共权限
		格式:~类名(){函数体内容}
调用时机:当对象消亡时,系统会自动调用,无需手动调用
			栈区:当对象生命周期结束后,会自动调用,无需手动调用
			堆区:如何使用delete释放对象空间,何时调用析构函数,先构造后析构
默认析构函数:
A.	当类中没有显性定义析构函数时,系统会默认提供一个析构函数,来完成对对象空间的释放
B.	如果类中显性定义了析构函数,则系统就不再提供默认的析构函数
C.	当类中没有指针成员时,对于类对象的析构,只需使用系统提供的析构函数即可,当类中有指针成员并指向堆区空间时,则需要显性定义析构函数,在析构函数的函数体内,完成对堆区空间的释放
D.	当有继承关系时,我们一般需要显性定义析构函数,并且要定义成虚析构函数

③	拷贝构造函数
功能:使用一个类对象给另一个类对象进行初始化工作的
格式:函数名与类同名
		 无返回值
		 参数:同类的其他类对象的引用
		权限:public
		格式:类名(类名&other){}
调用时机:使用一个类对象给另一个类对象初始化时,系统自动调用
			类对象作为函数参数传递时,也会自动调用拷贝构造函数
			函数的返回值时类对象时,也会自动调用拷贝构造函数
深拷贝:
浅拷贝:	
④	拷贝赋值函数
功能:本质上是运算符重载,也叫等号运算符重载函数,完成一个类对象给另一个类对象赋值时系统自动调用的
格式:函数名:operator=
		返回值:该左操作数自身的引用
		参数:同类的其他类对象
		权限:public
格式:类名&operator = (const 类名&other){函数体内容}
调用时机:当使用一个类对象给另一个类对象进项赋值时,系统自动调用

3.复习俩个运算符重载,理清参数和返回值在重载中的作用算 数运算符,赋值运算符

运算符重载参数:
a.运算符重载函数的参数由运算符本身决定
b.函数返回值可以由用户根据实际情况决定
运算符返回值类型:operator#(参数列表)

4.尝试实现条件函数的重载,成员函数的函数头:bool operator#(类名 &类对象)

#include <iostream>

using namespace std;
class Stu
{
    string name;
    int age;
    int score;
public:
    Stu()
    {
        cout << "Stu no parameters" << endl;
    }
    Stu(string name,int age,int score)
    {
       this->name = name;
       this->age = age;
       this->score = score;
       cout << "Stu have parameters" << endl;
    }
    //destructor function
    ~Stu()
    {
        cout << "destructor function " <<endl;
    }
    //output object value
    void show()
    {
        cout << "name:" << name <<endl;
        cout << "age:" << age <<endl;
        cout << "score:" << score <<endl;
    }
    //copy construction function
    Stu(Stu &other):name(other.name),age(other.age),score(other.score)
    {
        cout <<"copy construction function" << endl;
    }
    //copy assignment function
    Stu &operator = (const Stu &other)
    {
        this->name = other.name;
        this->age = other.age;
        this->score = other.score;
        cout <<"copy assignment function" << endl;
    }
    //+operator overload
    Stu &operator+(Stu &p1)
    {
        static Stu p3;
        p3.name = this->name + p1.name;
        p3.age = this->age + p1.age;
        p3.score = this->score +p1.score;
        cout << "this is operator overload +" << endl;
        return p3;
    }
    friend Stu &operator +=(Stu &p1,Stu &p2);
    //>operator function
    bool operator >(Stu &p)
    {
        cout <<"this is > operator function"<< endl;
        return (this->age>p.age);
    }

};
//+=assignment operator overload
Stu &operator +=(Stu &p1,Stu &p2)
{
    p1.name +=p2.name;
    p1.age +=p2.age;
    p1.score+=p2.score;
    return p1;
}
int main()
{
    Stu p1("lll",18,99);
    Stu p2("sss",1,2);
    p1.show();
    p2.show();
    cout << "~~~~~~one~~~~~~~~~~~~~" << endl;
    Stu p3 = p1;
    p3.show();
    cout << "~~~~~~~~~tow~~~~~~~~~~" << endl;
    Stu p4;
    p4 = p1;
    p4.show();
    cout << "~~~~~~~~three~~~~~~~~~~~" << endl;
    Stu p5 = p1+p2;
    p5.show();
    cout << "~~~~~~~four~~~~~~~~~~~~" << endl;
    p2+=p1;
    p2.show();
    cout << "~~~~~~~~~~five~~~~~~~~~" << endl;
    bool sum = p1 > p2;
    cout << "bool:" << sum << endl;
    return 0;
}

运行结果

Stu have parameters
Stu have parameters
name:lll
age:18
score:99
name:sss
age:1
score:2
~~~~~~one~~~~~~~~~~~~~
copy construction function
name:lll
age:18
score:99
~~~~~~~~~tow~~~~~~~~~~
Stu no parameters
copy assignment function
name:lll
age:18
score:99
~~~~~~~~three~~~~~~~~~~~
Stu no parameters
this is operator overload +
copy construction function
name:lllsss
age:19
score:101
~~~~~~~four~~~~~~~~~~~~
name:ssslll
age:19
score:101
~~~~~~~~~~five~~~~~~~~~
this is > operator function
bool:0
destructor function
destructor function
destructor function
destructor function
destructor function
destructor function

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值