【c++】多继承
来源:互联网 发布:维多利亚服饰知乎 编辑:程序博客网 时间:2024/05/16 15:26
一、多继承格式:
class<派生类名>:<继承方式><基类名1>,....,<继承方式><基类名n>
{
<定义派生类自己的成员>
}
二、多继承引发的问题
二义性和支配规则
出现二义性的两种情况
1、调用不同基类的相同成员可能出现二义性
即两个基类中成员函数具有相同的名字
比如下列程序:
#include<iostream>
using namespace std;
class Basecalss1
{
public:
void seta(int x)
{
a=x;
}
void show()
{
cout<<"a="<<a<<endl;
}
private:
int a;
};
class Basecalss2
{
public:
void setb(int x)
{
b=x;
}
void show()
{
cout<<"b="<<b<<endl;
}
private:
int b;
};
class Derivedclass : public Basecalss1,public Basecalss2
{
};
int main()
{
Derivedclass obj_d;
obj_d.seta(5);
obj_d.show();
obj_d.seta(2);
obj_d.show();
}
解决方式:
使用作用域运算符
int main()
{
Derivedclass obj_d;
obj_d.seta(5);
//obj_d.show();
obj_d.Basecalss1::show();
obj_d.setb(2);
//obj_d.show();
obj_d.Basecalss2::show();
}
2、访问共同基类的成员时可能出现二义性
#include<iostream>
using namespace std;
class Base
{
protected:
int val;
};
class Baseclass1:public Base
{
public:
void seta(int x)
{
val=x;
}
};
class Baseclass2:public Base
{
public:
void setb(int x)
{
val=x;
}
};
class Derivedclass:public Baseclass1,public Baseclass2
{
public:
void show()
{cout<<"val"<<val<<endl;}
};
int main()
{
Derivedclass obj_d;
obj_d.seta(5);
obj_d.show();
obj_d.setb(10);
obj_d.show();
}
解决方式:
1.利用虚基类
class Baseclass1:virtual public Base
class Baseclass2:virtual public Base
此时Bassclass1和Bassclass2共享基类Base的同一个单独共同对象
2.使用作用域运算符
void show()
{cout<<"val"<<Baseclass1::val<<endl;}
- objective C多继承
- 【c++】多继承
- [c++]多继承
- C++_多继承
- Objective C实现多继承!
- C继承和多态
- Objective-C 的“多继承”
- Objective-C 的“多继承”
- Objective-C 的“多继承”
- Objective-C 的“多继承”
- Objective-C 的“多继承”
- Objective-C 的“多继承”
- Objective-C 的“多继承”
- Objective-C 的“多继承”
- Objective C实现多继承
- Objective-C 的“多继承”
- Objective-C 的“多继承”
- Objective-C 的“多继承”
- 奇异值分解SVD应用——LSI
- JAVA第一课:WHY
- sessionStorage,localStorage总结
- html 第三节 (结构基础与超链接)
- Oracle建立表空间和用户
- 【c++】多继承
- java 泛型学习笔记
- [Leetcode] 41. First Missing Positive
- 写点东西
- Eclipse保存密码时发生异常的解决方法
- connect函数
- CodeForces 144C Anagram Search
- Tachyon源码结构分析(二)
- 面向模型