[QT学习]-002:C++基础(下)

注意:仅适用于复习C++或者有C基础人群观看

1、类函数的重载特性

        类函数可以被重载。私以为,所谓重载,就是这个函数名重新写一个函数,这个函数的形参可以与原先不同。

//类
class student{
public:
    student();              //构造函数 //构造函数不需要返回值,所以不需要void
    student(int a);         //构造函数重载
    ~student();             //析构函数
    void TEST();
    void TEST(int a);       //重载函数  在调用的时候会去自动匹配相应的函数调用
};

/*类函数的重载*/
void student::TEST(){
    cout << "30" << endl;
}

void student::TEST(int a){
    cout << a << endl;
}

        在我们调用重载函数的时候,根据形参的不同,系统会自动匹配对应的重载函数。通过这种方式的调用不同的重载函数。

int main()
{
    student my;
    my.TEST(100);
    my.TEST();
}

2、构造函数和析构函数

2.1、各自的作用?

        构造函数:假日我们定义了构造函数,就会触发这个函数、

        析构函数:假日我们定义了析构函数,当对象被删除或者生命周期结束的时候,就会触发析构函数。

2.2、如何定义构造函数和析构函数?

       构造函数和析构函数必须和类名一摸一样。析构函数前面要加“~”

        正如下段代码所示:

//类
class student{
public:
    student();              //构造函数 //构造函数不需要返回值,所以不需要void
    student(int a);         //构造函数重载
    ~student();             //析构函数
    void TEST();
    void TEST(int a);       //重载函数  在调用的时候会去自动匹配相应的函数调用
};

/*构造函数和析构函数*/
student::student(){
    cout << "构造函数输出:HELLO" << endl;  //构造函数名称必须与类名一致
}

student::~student(){
    cout << "析构函数输出:BYEBYE" << endl;
}

student::student(int a){
    cout << "重载析构函数:" << a << endl;  //构造函数名称必须与类名一致
}

int main()
{
    student my;
    student *MY1 = new student;

    delete MY1;
}

        

        由输出结果可见, student my;和student *MY1 = new student;都实例化了一个对象,因此触发了两次构造函数。同时my声明周期结束,并且MY1被释放,触发了两次析构函数。

2.3、构造函数也可以重载?

        构造函数可以重载,依然是依据形参的不同,触发不同的构造函数。将主函数改为如下。发现触发的构造函数不同了。

        值得注意的是,想要使用重载的构造函数,必须是以开辟堆的方式实例化的对象才可以,直接定义的对象无法调用。

int main()
{
    student my;
    student *MY1 = new student(10);

    delete MY1;
}

3、类的继承

3.1、什么是类的继承?

        类的继承允许我们在新的类里面继承父类的public和protected部分,private是不能被继承的。

当我们觉得这个类不好的时候,可以使用类的继承,添加需要的成员。

        格式:

class 儿子:public 爸爸{
    public:
        
};
/*类的继承*/
class mystudent : public student{
public:
    int grate;
};

3.2、如何调用继承?

        与类的调用方法一致。

int main()
{
    student my;
    student *MY1 = new student(10);
    mystudent my2;
    my2.grate = 10086;
    cout << my2.grate <<endl;
    delete MY1;
}

4、虚函数和纯虚函数

        虚函数:有实际定义的,允许派生类对他进行覆盖式的替换,virtual 来修饰。

        纯虚函数:没有实际定义的虚函数

        虚函数是用在类的继承上面的。

//纯虚函数的创建
class student{
public:
    virtual void test();    //虚函数
    virtual void testn(){}; //纯虚函数
};

//父类默认函数
void student::test(){
    cout << "30" << endl;
}

//子类继承父类,并再次声明test()函数,同时重新覆盖test()函数
class mystudent : public student{
public:
    int grate;
    void test();
};
void mystudent::test(){
    cout << 110 <<endl;
}

//主函数
int main()
{
    mystudent my2;

    my2.test();
}

        输出结果是子类被覆盖过的。

        以我个人浅薄的理解,这个很像单片机中的__WEAK弱定义,不再次定义它默认执行某个逻辑,直到你自己再次定义它。

4.1虚函数的优点?

        可以预留接口,分工合。

5、总结

        至此,QT学习的C++知识大致复习完毕。下一期计划开始QT的学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值