注意:仅适用于复习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的学习。