首页 / C++ / Effective C++条款40
Effective C++条款40
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Effective C++条款40,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2063字,纯文字阅读大概需要3分钟。
内容图文
本节条款讲述了多重继承的使用
多重继承一般情况下用的很少,原因在于多重继承容易出现程序错误。以下去两个典型的调用错误:
第一种错误如下代码:
#include<iostream>
using namespace std;
class B
{
public:
virtualintm(){}
};
class C
{
public:
virtualintm(){};
};
class D :public B,private C
{
public:
};
int main()
{
D d;
d.m();//编译不通过,因为m()调用不明确return0;
}
如上代码,由于B类中有个m()函数,C类中也有个m()函数,D同时继承B和D的m()函数,所以在调用的时候无法确定调用哪个。虽然D继承C是private方式,D无法调用C的m()函数,可是函数匹配在函数可调用性之前处理,两个类的m()函数都是最佳匹配,所以系统无法取舍调用哪个函数。
第二种错误代码:
如下:
class A
{
public:
int m;
};
class B:public A
{
public:
};
class C :public A
{
public:
};
class D :public B,private C
{
public:
};
如上代码,B和C同时继承自A,D又继承自B和C,所以,对于A中的数据,D中都会出现两份。比如int m,为了预防这种事情发生,可对继承关系添加virtual关键字避免。
如下代码:
#include<iostream>
using namespace std;
class A
{
public:
};
class B:virtualpublic A
{
public:
virtualintm(){}
};
class C :virtualpublic A
{
public:
virtualintm(){};
};
class D :public B,private C
{
public:
};
并且运用virtual关键字对程序而言会出现副作用,副作用是
1.使用virtual继承的对象比non-virtual继承的对象体积大
2。访问virtual base classes成员变量比访问non-virtual base classes成员变量速度慢。
使用多重继承在有些时候却是合适的,这样可以提高程序的复用率,看一下书上的例子:
class IPerson{
public:
virtual ~IPerson();
virtual std::string name() const=0;
virtual std::string birthDate() const=0;
};
class DatabaseID{……};
class PersonInfo{
public:
explicitPersonInfo(DatabaseID pid);
virtual ~PersonInfo();
virtualconstchar* theName() const;
virtualconstchar* theBirthdayDate() const;
……
private:
virtualconstchar* valueDelimOpen() const;
virtualconstchar* valueDelimClose() const;
……
};
class CPerson: public IPerson, private PersonInfo
{
public:
explicitCPerson(DatabaseID pid): PersonInfo(pid){}
virtual std::string name() const
{
return PersonInfo::theName();
}
virtual std::string birthDate()
{
return PersonInfo::theBirthDate();
}
private:
constchar* valueDelimOpen() const{return"";}
constchar* valueDelimClose() const{return"";}
};
原文:http://blog.csdn.net/u011058765/article/details/46343931
内容总结
以上是互联网集市为您收集整理的Effective C++条款40全部内容,希望文章能够帮你解决Effective C++条款40所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。