类中类的构造函数带参数,并且参数还需要计算后得到,怎么处理
类中类的构造函数带参数,并且参数还需要计算后得到,怎么办
我其实是用在窗口的创建上。自己建了一个窗口类,里面有一个CDC类,CClientDC的创建是需要先得到pWnd的,但我又想把这个CDC类和pWnd指针放在一个类里面,于是就有了上面的问题。pWnd就是在初始化窗口后才产生的东西。
------解决方案--------------------
不管你类TWO的构造函数是带参数还是不带参数,你都不能在类ONE的声明中去调用它的构造函数;类ONE的声明中只是告诉你它包含一个类TWO的成员变量而已;
你可以在窗口类中声明一个CClientDC*类型的指针变量;然后在窗口类的OnInitialDlg函数中初始话CClientDC
------解决方案--------------------
------解决方案--------------------
不是这样的,你有3个独立的窗口?那么就得有3个独立的dc,可以声明含3个元素的dc数组,dc是跟窗口相关联的!
当然也可以画图的时候,针对不同的窗口声明一个局部的dc,但这样的话开销大
当然你要是贴上关键代码会更好点
#include <iostream.h>
class CTwo
{
public:
int out;
CTwo(int i)
{ out = i * 2; }
};
class COne
{
public:
COne()
{ }
int mid;
void calc()
{ mid = 2; }
//在执行完calc之后才会产生正确的mid
//才能用mid作为CTwo的构造函数的参数来实例化CTwo
CTwo bbb(mid); //这里出错,但是就是这个意思。不过CTwo实例化实际上应该放在calc执行之后
};
void main()
{
COne aaa;
aaa.calc();
cout<<aaa.bbb.out<<endl; //希望最后输出CTwo类中的out值 应该是2*2=4
}
我其实是用在窗口的创建上。自己建了一个窗口类,里面有一个CDC类,CClientDC的创建是需要先得到pWnd的,但我又想把这个CDC类和pWnd指针放在一个类里面,于是就有了上面的问题。pWnd就是在初始化窗口后才产生的东西。
------解决方案--------------------
不管你类TWO的构造函数是带参数还是不带参数,你都不能在类ONE的声明中去调用它的构造函数;类ONE的声明中只是告诉你它包含一个类TWO的成员变量而已;
你可以在窗口类中声明一个CClientDC*类型的指针变量;然后在窗口类的OnInitialDlg函数中初始话CClientDC
//窗口类头文件中声明:
CClientDC* m_pDC;
//窗口类OnInitialDld中初始化:
m_pDC=new CClientDC(this);
------解决方案--------------------
#include <iostream>
class CTwo
{
public:
int out;
CTwo(int i)
{ out = i * 2; }
};
class COne
{
public:
COne()
{
bbb= 0;
}
~COne()
{
delete bbb;
}
int mid;
void calc()
{
mid = 2;
//延迟初始化bb
bbb = new CTwo(mid);
}
CTwo* bbb;
};
int main()
{
COne aaa;
aaa.calc();
std::cout<<aaa.bbb->out<<std::endl;
}
------解决方案--------------------
不是这样的,你有3个独立的窗口?那么就得有3个独立的dc,可以声明含3个元素的dc数组,dc是跟窗口相关联的!
当然也可以画图的时候,针对不同的窗口声明一个局部的dc,但这样的话开销大
当然你要是贴上关键代码会更好点