1.
类的构造函数_类的构造函数和析构函数
类的构造函数_类的构造函数和析构函数
派生类构造函数中的某些初始化可能是基于基类的,所以规定构造在类层次的根处开始,而在每一层,首先调用基类构造函数,然后析构函数写成虚函数,在这个例子当中没有发现这么写的必要,但是这样写有一个好处调用成员对象构造函数。因为c++的成员变量是不会自动初始化的。
2.
如果没有显式调用基类的构造函数,会自动调用基类的无参构造函数。而如果基类只有带参数的构造函数,则会报错。不一定要显式的无参构造函数,可以显式调用基类带参数的构造函数。
#include
class base{
base(int c){cout<< "基类带参构造函数" << c << endl;}
class derived:public base{
derived(int c):base(c) // 显式调用基类构造函数
{cout<< "派生类带参构造函数" << c << endl;
}~derived(){cout<<"派生类析构" << endl;}
int main()
{int i = 9;
return 0;
}输出同一个类,我这么用:结果:
基类带参构造函数9
派生类带参构造函数9
派生类析构
基类析构
刚才看错Student那行了,
date(int m,int d,int y);这个不是继承。
这个是单纯的列表初始化。
有时候没有给类指定默认构造函数,会采用列表初始化方式。如果都没有,就会报错。
而且列表初始化初始过程按照变量声明顺序来进行。
即便第二个函数的两个参数都是0,这两个也是不一样的构造函数,只是在第二个函数的参数都是0的时候,两个构造函数造成的效果是一样的了。sum+=(s[i]-0);如果你不想定义那个无参的构造函数也是可以的,第二个构造函数也可以达到这样的效果。但是你如果定义了这两个构造函数的话,使用上就要对它们有所区分了
这个不一样。两个定义就是你在实例化类的时候可以带参数,也可以不带。但是列表初始化不同于其他构造函数,其他构造函数是赋值的形式。只有第二个的话就必须带参数,不然报错。
1、虚析构函数和析构函数在功能上是一回事,因此除了动态联编(此处意思:需要销毁 父类指针指向的子类对象的空间)外,其他性质和析构函数类似。
2、析构函数与构造函数名字相同,但它前面必须加一个波浪号(~);
3、析构函数没有参数,也没有返回值,而且不能重载,因此在一个类中只能有一个析构函数;当撤消对象时,编译系统会自动地调用析构函数。
一般来说,构造函数就是在对象定义或~base(){cout<<"基类析构" << endl;}创建时自动执行,析构函数就是在函数退出,程序退出,或对象被删除时自动执行,譬如说:
class Test{
.using namespace std;..
Test ptr;
2. 对象创建,构造函数自动呼叫
Test ptr=new Test();
3. 函数退出
void function()
{Test ptr; //构造函数自动呼叫
...
} // 函数执行完毕,析构函数就会自动呼叫
4. 对象被删除, 如果对象是指针, delete 时析构函数就会自动呼叫
void function()
{Test ptr;
ptr = new Test() //构造函数自动呼叫
...
delete ptr; //delete 时析构函数就会自动呼叫
} //要注意的是,如果对象是指针,只有delete才会呼叫析构函数,就算函数退出,程序退出也不回呼叫
大概就是这样,自己慢慢消化
1、带参数的构造函数可以传递参数区初始化类的minute=mMinute;数据成员。
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
2、例程:
class tim1. 对象定义,构造函数自动呼叫e
{public:
time(int mHour, int mMinute, int mSec)//constructor.构造函数
}void show_time();
private:
int hour,minute,sec;
int main()
{class time t1(12,11,50);//调用构造函数
t1.show_time();
return 0;
}void time::show_time()
因为一个类一旦实例化出一个对象, 根据实际的情况, 他所对应的一些字段必须要有一定的默认值
derived d1(i);再或者一些非空的属性/字段, 尤其是别类对象的时候, 你如果不进行初始化, 用到它的时候就有空引用的潜在BUG
当然这个初始化是"常用"的, 不是一定要用的
book::book(const char s1, const char s2, const char s3, daa(){ m_a = 1; m_b = 1; }ouble d, int i),这个构造函数需要5个参数,而调用时只传了4个参数,编译器找不到合适的构造函数,因此报错了。
无参构造函数,写不写都可以,即使不写,编译器也会给你加一个默认构造函数的
就是当派生类中析构函数有作时,调用基类函数指针进行delete作,同样可以执行派生类析构函数
所以在基类析构函数没有任何作情况下,把它定义成虚函数
> 1.他比如说 一个Vehicle类,里面有个属性为TiresCount, 轮胎数只要至少也得是个1, 所以在构造中就把他初始化为1也不实例化对象 写那个干啥
> 2.我就是把它去掉了 也能运行 为什么
因为它是抽象的,具体实现在子类中,基类实际上相当于"Intece"的作用了。
> 3,程序中构造函数是普通的 为什么析构函数写成了 虚函数形式?
解释起来稍多些,网上有专业的解释,你百度一下“虚析构函数”有很多介绍。
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。