设为首页 加入收藏

TOP

[C/C++]在一个类中重载另一个类的构造函数 ----构造函数是一个特殊的操作符
2014-11-23 23:24:10 来源: 作者: 【 】 浏览:1
Tags:C/C 一个 重载 构造 函数 ---- 特殊 操作

假设我们有两个类A,B

[cpp]
class A
{
public:
A(int n) : a(n){}
void Print() {cout << a << endl;}
private:
int a;
};



class B
{ www.2cto.com
public:
void SetVal(int a) {b = a;}
private:
int b;
};

需要用类B的对象去构造类A的对象时,一般可以在类A中做如下构造函数定义:

[cpp]
A(B);
但这个构造函数在以下情况时,是无法定义的:

1. 用B的私有成员给A赋值,且B没有定义A为友元类;

2. 对A的定义没有权限修改,只能修改B

这里,需要把A的构造函数当作一个特殊的操作符,在类B的定义中重载这个操作符。

[cpp]
class B
{
public:
operator A() const
{
return A(b);
}
void SetVal(int a) {b = a;}
private:
int b;
};

重载后,在需要以A为参数的地方,放上B,都会隐式调用B重载的操作符A(),来构造一个类A的对象。
如:

[cpp]
A objA(objB);

vector vecA;
vecA.push_back(objB);
完整代码示例:

[cpp]
#include
#include
#include
using namespace std;

class A
{
public:
A(int n) : a(n){}
void Print() {cout << a << endl;}
private:
int a;
};



class B
{
public:
operator A() const
{
return A(b);
}
void SetVal(int a) {b = a;}
private:
int b;
};


int main()
{
B objB;
objB.SetVal(5);
A objA(objB);
objA.Print();

objB.SetVal(10);
vector
vecA;
vecA.push_back(objB);
vecA[0].Print();

return 0;
}
输出结果:

5

10

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言之注意基本类型的范围 下一篇c语言用指针实现求最大数和最小数..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: