- 数组名&指向数组的指针
int a[3] = {1,5,10};
cout << a << endl;
cout << *a << endl;
cout << *a + 1 << endl;
cout << *(a + 1) << endl;
cout << (*a) + 1 << endl;
结果表明*a+1=(*a)+1
0133FB90
1
2
5
2
- 默认形参
void print(int b, int c, int d = 2, int a = 1)
{
cout << b << endl;
cout << c << endl;
cout << d << endl;
cout << a << endl;
}
结果表明:
1)默认形参需要放到形参列表最后面,否则编译报错void print(int b=1, int c, int d = 2, int a = 1)
2)默认形参可以不给值,也可以给值,其他必须传值
print()
编译错误
print(1)
编译错误
print(1,2,3)
正确
print(1,2,3,4)
正确
- 拷贝构造和赋值构造的调用
调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生。如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那就是对已有的对象赋值,调用的是赋值运算符。
调用拷贝构造函数主要有以下场景:
对象作为函数的参数,以值传递的方式传给函数。
对象作为函数的返回值,以值的方式从函数返回
使用一个对象给另一个对象初始化
实例:
class AA
{
public:
AA()
{
cout << "默认构造" << endl;
}
AA(int a)
{
cout << "有参构造" << endl;
}
AA(const AA& aa)
{
_data = aa._data;
cout << "拷贝构造" << endl;
}
AA& operator=(const AA& aa)
{
cout << "赋值构造" << endl;
_data = aa._data;
return *this;
}
private:
int _data;
};
int main()
{
AA a1(1);
AA a2(a1);
AA a3;
a3 = a1;
AA a4 = a2;
a2 = a1;
return 0;
}
结果
有参构造
拷贝构造
默认构造
赋值构造
拷贝构造
赋值构造
- vector操作
1)resize不会改变capacity大小,只会改变size大小
2)删除空间需要clear+shrink_to_fit
3)reserve只可以改变capacity大小,不会改变size大小
image.png
实例:
vector<int> v;
cout << v.size()<<" "<<v.capacity() << endl;
v.resize(10, 1);
cout << v.size() << " " << v.capacity() << endl;
v.resize(3, 2);
cout << v.size() << " " << v.capacity() << endl;
v.reserve(20);
cout << v.size() << " " << v.capacity() << endl;
0 0
10 10
3 10
3 20
网友评论