C++虚构函数 构造函数更新中......(数组与指针)

析构函数的触发有两个:1)栈上的对象跳出了它的作用域。2)堆上的对象被调用deletes释放

析构函数和构造函数都没有继承的概念!

Class B:public A{
B(int B_1){//可以初始化列表的形式对A的构造函数进行利用如:B(int B_1):A(B_1){ }
//A(B_1); 错误!说明构造函数不能被继承
fun();//在A中的函数

}
}

 当调用子类析构函数时会自动调用父类的析构函数,这样会自动往上调用!

当利用虚析构函数这个概念类解决内存泄露(即把含有虚函数的基类的析构函数也设为虚函数,这样在delete base class point的时候能释放掉指向的子类对象,也就是能够调用到子类的析构函数)

虚析构函数还有个作用那就是用来定义abtract抽象类;

1:如果你的Base class中没有Virtual成员函数,但你要他成为抽象类,那么可以

class base{

 

virtual ~base()=0;

}

 

什么函数不能声明为虚函数?
一个类中将所有的成员函数都尽可能地设置为虚函数总是有益的。 
设置虚函数须注意: 
1:只有类的成员函数才能说明为虚函数; 
2:静态成员函数不能是虚函数; 
3:内联函数不能为虚函数; 
4:构造函数不能是虚函数; 
5:析构函数可以是虚函数,而且通常声明为虚函数。

为什么构造函数不能是虚构函数?

 1,从存储空间角度 

        虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。

2,从使用角度

        虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数本身就是要初始化实例,那使用虚函数也没有实际意义呀。所以构造函数没有必要是虚函数。

 

 

关于引用要注意的地方:

int c=9;
const int &bb=14;//对的 
int &de=9;//错的//9不能改变,而引用有改的风险,所以不能这样声明!

const int &cc=c;

cc不能改变  但是可以通过改变c来改变cc对于的值,这个在某种情况下起到安全性的作用!

数组与指针:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值