我看到了一段程序:
class CFatherView
{
CFatherView(int a,bool b);
int c;
……
}Class CSonView:public CFatherView
{
CFatherView(a,b){c=0;}
}
这样可以么?构造函数又不是虚函数。请大家指点。

解决方案 »

  1.   

    Class CSonView:public CFatherView
    {
    CFatherView::CFatherView(a,b){c=0;}
    }
    是不是应该这样啊?
      

  2.   

    构造函数可以有参数,可以有多个,还不够么?
    要是还是不够的话,把需要重载的函数搬到其他类里面去,然后根据构造函数传进来的RTTI信息动态创建这个类……
    典型的示例就是CDocTemplate……
      

  3.   

    看看the C++ programming language 15.6.2节,我的是英文special edition,
    virtual constructor的相关章节!
      

  4.   

    不行,构造函数不能重载。我觉得你看到的那段代码应该是这样的:Class CSonView:public CFatherView
    {
        CSonView(int a, bool b) : CFatherView(a,b){ c = 0; };
    } : CFatherView(a,b) 是串联构造,表示构造函数 CSonView(int a, bool b) 应该串联调用 CFatherView(a,b) 而不是 CFatherView()
      

  5.   

    老兄你好,我现在正在学习vc++,以我的经验和知识,不可以定义父类的构造函数,只能是继承,一般的来说,构造函数的名字就要与类名一样,例如class  a;
    那么它的构造函数也应该是  a(参数);以后多交流!
      

  6.   

    那不叫定义父类的构造函数,叫重载。
    如果你重载了,那么CSonView a;时,用重载的构造函数来初始化对象。不是只有虚函数才能被重载。虚函数是为了实现多态性,运行时多态性。