核心:{}
#include<iostream>
using namespace std;
class person { //非聚合化
public:
person(int sum) :age(sum) { cout << "person(int) age->" << age << endl; };
person(int sum, string str) :age(sum), name(str) { cout << "person(int,sting)" << endl; };
int age;
string name;
}p{1,"abc"};
int main()
{
person p1(1);
person p2 = 2;
person p3 = { 3 };
person p4{ 4 };
//变量&数组&指针同理
int arr[]{ 1,2,3,5,6 };
int* p = new int{ 1 };
int* array = new int[3] {1, 2, 3};
return 0;
}
聚合化:
数组
类:{没有用户自定义构造函数,没有私有或者保护的非静态成员变量,无基类,无虚函数,
类中不能有使用{}
和=
直接初始化的非静态数据成员(C++14开始支持)}
#include<iostream>
using namespace std;
class person {
public:
int x;
static int z;
//protected:
// int y;
}t{1};
int person::z = 100;
int main()
{
person p1{ 1 };
cout << p1.x;
//person p2{ 1,2 }; //err静态成员不属于类本身,初始化需要在全局区;
return 0;
}
非聚合化:
需要在类的内部自定义一个构造函数, 在构造函数中使用初始化列表对类成员变量进行初始化
std::initializer_list:
size&迭代器
#include<iostream>
#include<vector>
using namespace std;
void fun(std::initializer_list<int> ls) //应用在函数参数
{
for (auto i = ls.begin(); i != ls.end(); i++)
std::cout << *i << " ";
std::cout << std::endl;
}
class person {
public:
person(initializer_list<int>ls) //应用在类内构造函数
{
for (auto i = ls.begin(); i != ls.end(); i++)
cout << *i << " ";
cout << endl;
}
};
int main()
{
fun({ 1,2,3,4,5 });
return 0;
}