C ++使用ctor参数在类中实例化类

时间:2016-02-07 19:58:10

标签: c++ class

我将类实例化为另一个类的成员时遇到问题。 这是我的代码:

class myClassA{
public:
    myClassA(){
        printf("myClassTwo ctor");
    }
    void doSomething(){ printf("myClassA did something\r\n");}
};

class myClassB{
public:
    myClassB(int i){
        printf("myClassA ctor got %d\r\n",i);
        threeMyI = i;
    }
private:
    int threeMyI;
};

class myClassC{
public:
    myClassC(){
        printf("C ctor without params\r\n");

    }
    myClassA instanceA;
    myClassB instanceB(29); //<== Not working why??

};

我有一个班级myClassC我希望有两个成员,一个是myClassA类型,另一个是myClassB。这适用于myClassA。但是一旦我尝试创建一个具有ctor参数的myClassB实例,它就会因以下编译器错误而失败:

..\src\main.cpp:34:21: error: expected identifier before numeric constant   
myClassB instanceB(29); //<== Not working why??
..\src\main.cpp:34:21: error: expected ',' or '...' before numeric constant

在我的主要功能中,这种声明效果很好:

int main(void){

    printf("class test\r\n");
    myClassC instanceC1;

    myClassA instanceA1;
    myClassB instanceB1(25);

    return 0;
}

但我不知道在使用ctor参数实例化类时会有什么大不同。希望有人能给我一个提示我做错了什么。

2 个答案:

答案 0 :(得分:0)

你只能声明成员变量,你无法实例化它们。

要调用成员变量的构造函数,可以在自己的构造函数中使用成员初始化范例:

struct A { // same as class A but public by default
    int m_a;

    A(int a) : m_a(a) {}
};

struct B {
    A m_a;
    int m_b;

    B(int a, int b) : m_a(a), m_b(b) {}
};

或使用您的代码:

#include <cstdio>


class myClassA{
public:
    myClassA(){
        printf("myClassTwo ctor");
    }
    void doSomething(){ printf("myClassA did something\r\n");}
};

class myClassB{
public:
    myClassB(int i) : threeMyI(i) {
        printf("myClassA ctor got %d\r\n",i);
    }
private:
    int threeMyI;
};

class myClassC{
public:
    myClassC() : instanceA(), instanceB(20) {
        printf("C ctor without params\r\n");

    }
    myClassA instanceA;
    myClassB instanceB;

};

int main()
{
    myClassA a;
    myClassB b(10);
    myClassC c;
}

Live demo

答案 1 :(得分:0)

根据我的理解,您似乎希望为私有属性instanceB使用默认实例化。在这种情况下,您提议的不合法,默认输入参数应设置为

myClassC() : instanceB(29) { // mind the ":" character 
    printf("C ctor without params\r\n");
}

这样可以调用myClassB的构造函数来实例化具有相关默认参数的私有属性instanceB