内嵌对象,即一个类内的对象中有另一个类的对象。如下
#include <iostream>
using namespace std;
//A类
class A{
public:
A(){cout <<"moren" << endl;}
A(int a){cout << "youcan" << endl; x = a;}
private:
int x;
};
//B类
class B{
public:
B(){}
private:
A a;
};
在B中,内嵌对象A a必须在类B之前初始化。
也就是在调用B的构造函数之前A已经调用过构造函数。
这个时候A会默认调用默认构造。输出moren。
注意!不能简单地在B类中A a(1); 这么初始化。
类内非静态成员不能不通过对象初始化。
class A{
public:
A() = delete;
//A(){cout <<"moren" << endl;}
A(int a){cout << "youcan" << endl; x = a;}
private:
int x;
};
C++中有两个语句可以命令编译器生成或者不生成默认构造函数
A() = default;//生成默认构造函数
A() = delete;//不生成默认构造函数
这样可以在B构造函数中运用初始化列表,对a进行赋值。
class B{
public:
B(int m):a(m){
}
private:
A a;
};
需要区分的是!
#include <iostream>
using namespace std;
class A{
public:
A() = delete;
//A(){cout <<"moren" << endl;}
A(int a){cout << "youcan" << endl; x = a;}
private:
int x;
};
class B{
public:
B(int m):a(m){
this->b(m);
}
private:
A a;
A b(int);
};
A B::b(int){
cout << "amazing" << endl;
A a(1);
return a;
}
int main()
{
int m = 1;
B b(m);
return 0;
}
A b(int);此时 b 是个函数,也就是B中的成员有一个返回值为A类型的函数!注意区分!