继承的问题

继承:

面向对象最重要的概念
:依据一个类来定义拎一个类
class Derived ::Base,这就是一个私有继承

继承类的存储结构:

虚方法->重载
虚函数表->8个字节
B->A->A:->A{}->B:->B{};
与C#和java的最大区别是要自己维护内存,

#include<iostream>
using namespace std;
class A{


} 

class B:public A{
private:
 int  _m;
 objectA _OA;
 objectB  _OB;//构造顺序按定义顺序
public:
   B():A(){
   cout<<"B construct "<<endl;
   B(int m):_m(m){//若没有显示指定,会调用默认构造函数
   cout<< "B int constructor"<<endl;
  }
  B(const B&b):A(b){
     
  }
  void operator=(const B& b){
  A::operator=(b);
}
  virtual ~ B(){//父类指针可以调用子类的析构函数
     cout<<""<<endl;
}
void f(){
cout<<"call function B::F"<<endl;
}
void g() override{//虚方法一直调子类的
cout<<"call function B::g"<<endl;
}

}
int main(){
B bb(1);
bb.f();
bb.g();
B*pB=new B();
pB->f();
pB->g();
A*pA2=PB;
//父类指针可以指向子类,但子类指针无法指向父类
B*pB2=(B*)pA2;//可以进行强转
PB2->f()//可能报内存错误
B*pB3=static_cast<B*>(pA2);
B*pB3=dynamic_cast<B*>(pA2);//进行动态转换比较安全,通过虚函数表来判断
if(pB4){
cout<<"dynamic success"<<endl;
}else{
cout<<"dynamic failed"<<endl;
}

A*pA=new pB();
delete pA;
B*pB=new B();
pB->A::f();

return 0;
}

继承权限:

子类访问权限:访问权限+继承权限做叠加操作

外部访问权限:继承权限

C++允许多继承

问题:
菱形继承->虚继承解决问题

D*d=new  D();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值