C++基础(下)
1、类函数的重载函数
表示我们可以在类里定义同名但参数不同的函数。
如,一个类里面可以同时定义下面两个函数,但内部参数不同。
class student//类,类中的成员可以时变量,也可以是函数
{
public:
void test();
void test(int a);
};
重载函数在调用时,会自动判断参数类型来选择使用哪个函数。
2、构造函数和析构函数
析构函数:如已定义析构函数,则当对象被删除/生命周期结束,则触发析构函数
构造函数:一经定义即刻触发
注意:
(1)析构函数和构造函数的函数名必须和类名一样
(2)析构函数前要加上一个符号~
如构造函数:
class student//类,类中的成员可以时变量,也可以是函数
{
public:
student();
~student();
void test();
void test(int a);
};
student::student()//构造函数
{
cout<<"hello!"<<endl;
}
student::~student()//析构函数
{
cout<<"Bye!"<<endl;
}
void student ::test()
{
cout<<123<<endl;
}
void student ::test(int a)
{
a=80;
cout<<a<<endl;
}
int main()
{
student *my =new student;
delete my;
return 0;
}
打印结果:
注意:
构造函数可以被重载,析构函数不可以重载。构造函数中的参数在定义类的时候就需要给出。
如构造函数要求引入一个int a
student::student(int a)
{
count<<a<<endl;
}
则定义student类的时候只能在堆里面定义,且需给出引入的参数
如:
student *me = new student(10)
3、类的继承
什么时类的继承?
指子类可以继承父类的public和protected部分,但不能继承private。
如子类mystudent要继承父类student,格式如下:
class student//类,类中的成员可以时变量,也可以是函数
{
public:
student();
~student();
void test();
void test(int a);
private:
int hehe ;
};
class mystudent : public student//子类继承父类
{
public:
int grade;
};
int main()
{
student *my =new student;
mystudent my2;
my2.grade=98;
my2.test();
return 0;
}
如何在子类里访问父类成员?
子类的要访问父类的成员也是通过 . 和 -> 来访问。
4、虚函数和纯虚函数
- 虚函数:有实际定义的,virtual来修饰,允许派生类对他进行覆盖式的替换(即在子类与父类中同时含有相同名称的函数时,子类函数的调用优先使用在子类中定义的虚函数)
- 纯虚函数:即没有实际定义的虚函数
如何定义一个虚函数?
如:
class student
{
public:
student();
~student();
virtual void test();//虚函数
virtual void test1(){};//纯虚函数
private:
int hehe ;
};
void student ::test()
{
cout<<123<<endl;
}
- 虚函数的优点:可以预留接口,实现分工合作