布吉企业网站建设,编程培训费用,长沙百度推广排名,充值话费网站建设构造函数 与 析构函数
构造函数代表一个对象的生成#xff0c;主要作用是初始化类的成员变量#xff0c;可以被重载 如果没有显式构造函数#xff0c;则实例化对象时#xff0c;系统会自动生成一个无参的构造函数 构造函数的名称与类名相同
析构函数代表的是一个对象的销…构造函数 与 析构函数
构造函数代表一个对象的生成主要作用是初始化类的成员变量可以被重载 如果没有显式构造函数则实例化对象时系统会自动生成一个无参的构造函数 构造函数的名称与类名相同
析构函数代表的是一个对象的销毁不可以被重载 析构函数的名称是 ~类名()
class Animal
{
public:string name;int age;Animal():name(dog), age(12) //显式无参构造函数这里借助c11的列表初始化{cout 这是无参构造函数 endl;}Animal(string name, int age) //显式有参构造函数{this-name name;this-age age;cout 这是有参构造函数 endl;}~Animal(){}; //析构函数
};Animal dog1; //会调用无参构造函数
Animal dog2(xiaohei,12); //会调用显式有参构造函数注意事项构造函数/析构函数 如果显式调用则必须是public权限
C封装
作用保证数据安全性
三种权限 public类内可以访问 子类可以访问 类外可以访问 protected类内可以访问 子类可以访问 类外不可以访问 private类内可以访问 子类不可以访问 类外不可以访问
C继承
作用实现代码复用节省代码量
继承中的构造函数和析构函数
class Animal
{
public:string name;int age;Animal():name(dog), age(12){cout 这是基类无参构造函数 endl;}Animal(string name, int age){this-name name;this-age age;cout 这是基类有参构造函数 endl;}~Animal(){cout 这是基类析构函数 endl;}
};class Dog:public Animal //公有继承自Animal类
{
public:string name;int age;Dog(){cout 这是Dog类无参构造函数 endl;}Dog(string name, int age){this-name name;this-age age;cout 这是Dog类有参构造函数 endl;}~Dog(){cout 这是Dog类析构函数 endl;}
};void Func1()
{Dog dog1();Dog dog2(小黑, 12);
}int main()
{Func1();system(pause);
}基类的构造函数和析构函数不会继承给派生类但会在派生类生成对象时调用 构造函数调用顺序先调用基类无参构造函数再调用派生类的构造函数如果想要调用基类的有参构造函数需要显式调用 Dog(string name, int age) : Animal(name, age) 析构函数调用顺序先调用派生类析构函数再调用基类析构函数
顺便讲一下函数重载、函数重定义和函数重写的区别
函数重载函数名相同函数参数列表不同参数类型、参数顺序、参数个数通过传入不同的实参调用不同的函数执行不同的功能 函数重定义当发生继承关系的时候子类和父类存在同名函数子类会 隐藏 父类的同名函数执行自己的函数 函数重写当发生继承关系的时候父类提供虚函数子类 重写覆盖 父类的虚函数展现的是子类的功能