C++ C++;在具有ctor参数的类中实例化类
我无法将一个类实例化为另一个类的成员。 这是我的密码:C++ C++;在具有ctor参数的类中实例化类,c++,class,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
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??
};
在我的主要功能中,这种声明很有效:
int main(void){
printf("class test\r\n");
myClassC instanceC1;
myClassA instanceA1;
myClassB instanceB1(25);
return 0;
}
但是我不知道在实例化一个带有ctor参数的类时有什么大的区别。希望有人能告诉我我做错了什么。你只能声明成员变量,不能实例化它们
要调用成员变量的构造函数,可以在自己的构造函数中使用memberwise初始化范例:
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;
}
#包括
类别myClassA{
公众:
myClassA(){
printf(“我的第二类公司”);
}
void doSomething(){printf(“myClassA做了某事\r\n”);}
};
类别myClassB{
公众:
myClassB(int i):3MyI(i){
printf(“myClassA获得%d\r\n”,i);
}
私人:
int-threeMyI;
};
类别myClassC{
公众:
myClassC():instanceA(),instanceB(20){
printf(“没有参数的C-ctor\r\n”);
}
myClassA instanceA;
myClassB实例B;
};
int main()
{
myClassA;
myClassB(10);
myClassC;
}
据我所知,您似乎希望为私有属性
instanceB
使用默认实例化。在这种情况下,您的建议是不合法的,默认输入参数应设置如下
myClassC() : instanceB(29) { // mind the ":" character
printf("C ctor without params\r\n");
}
这将影响调用myClassB
的构造函数,用相关的默认参数实例化您的私有属性instanceB
。myClassB instanceB(29)//
myClassC() : instanceB(29) { // mind the ":" character
printf("C ctor without params\r\n");
}