学习笔记,侵权联删
1.Vector
1.构造函数
vector():创建一个空vector
vector(int nSize):创建一个vector,元素个数为nSize
vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
2.
结论:
嵌套循环中的break和continue都只对一层循环起作用,用在内层循环时,只对内层循环其作用,对外层循环无影响
3.
~Array(){
delete []a;
}
请逐行解析下这段代码
ChatGPT
这段代码是一个析构函数的定义,用于释放之前动态分配的整型数组的内存。
逐行解析代码如下:
~Array(){:这是一个析构函数的声明。析构函数在对象被销毁时自动调用,用于执行对象的清理和资源释放操作。
delete []a;:使用 delete [] 关键字释放之前动态分配的整型数组 a 所占用的内存。delete [] 用于释放动态分配的数组,而不是单个对象。这里的 a 是一个指针,指向之前分配的整型数组。
4.
Array(){
cin>>n;
a=new int[n];
for (int i=0;i<n;i++) cin>>a[i];
}
请逐行解析下这段代码
ChatGPT
这段代码的目的是从用户输入中读取一个整数数组。
逐行解析代码如下:
Array(){:这是一个类的构造函数的声明。构造函数用于创建对象时初始化对象的成员变量和执行其他必要的操作。
cin>>n;:从标准输入(键盘)读取一个整数,并将其存储在变量 n 中。这个整数表示将要输入的数组元素个数。
a=new int[n];:动态分配一个整型数组,并将其地址赋值给指针变量 a。根据前面输入的数组元素个数 n,分配了相应大小的数组。
for (int i=0;i<n;i++) cin>>a[i];:使用 for 循环从标准输入读取 n 个整数,并将它们逐个存储在数组 a 的不同索引位置中。循环的迭代变量 i 从 0 开始,每次迭代递增 1,直到达到 n-1。
在这段代码中,首先读取整数 n,然后动态分配一个大小为 n 的整型数组,并通过循环读取 n 个整数,将它们存储在数组中。这样,就完成了从用户输入中读取整数数组的过程。
5.
初始化类有两种方式,一种叫构造函数,函数名称为类名,参数是成员变量的输入值,没有返回值,作用是输入成员变量的初始值,赋值给成员变量,这是用变量值初始化类;另一种叫拷贝构造函数,函数名称也是类名,与拷贝构造不同的是,它的参数是一个类,就是就是我们当前这个类,它的作用是用参数给的这个类的成员变量复制赋值给当前类的成员变量
6.
->是指针指向其成员的运算符。
. 是结构体的成员运算符。
最大的区别是->前面放的是指针,而.前面跟的是结构体变量。
例如:
struct A
{
int a;
int b;
};
A *point = malloc(sizeof(struct A));
point->a = 1;
A object;
object.a = 1;
7.
带参数的构造函数
默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值,如下面的例子所示:
#include <iostream>
using namespace std;
class Line
{
public:
void setLength( double len );
double getLength( void );
Line(double len); // 这是构造函数
private:
double length;
};
// 成员函数定义,包括构造函数
Line::Line( double len)
{
cout << "Object is being created, length = " << len << endl;
length = len;
}
void Line::setLength( double len )
{
length = len;
}
double Line::getLength( void )
{
return length;
}
// 程序的主函数
int main( )
{
Line line(10.0);
// 获取默认设置的长度
cout << "Length of line : " << line.getLength() <<endl;
// 再次设置长度
line.setLength(6.0);
cout << "Length of line : " << line.getLength() <<endl;
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Object is being created, length = 10
Length of line : 10
Length of line : 6
使用初始化列表来初始化字段
使用初始化列表来初始化字段:
Line::Line( double len): length(len)
{
cout << "Object is being created, length = " << len << endl;
}
类的析构函数
类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。
析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。
下面的实例有助于更好地理解析构函数的概念:
#include <iostream>
using namespace std;
class Line
{
public:
void setLength( double len );
double getLength( void );
Line(); // 这是构造函数声明
~Line(); // 这是析构函数声明
private:
double length;
};
// 成员函数定义,包括构造函数
Line::Line(void)
{
cout << "Object is being created" << endl;
}
Line::~Line(void)
{
cout << "Object is being deleted" << endl;
}
void Line::setLength( double len )
{
length = len;
}
double Line::getLength( void )
{
return length;
}
// 程序的主函数
int main( )
{
Line line;
// 设置长度
line.setLength(6.0);
cout << "Length of line : " << line.getLength() <<endl;
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Object is being created
Length of line : 6
Object is being deleted
8.
c++在c++11标准中引入了lambda表达式,一般用于定义匿名函数,使得代码更加灵活简洁。lambda表达式与普通函数类似,也有参数列表、返回值类型和函数体,只是它的定义方式更简洁,并且可以在函数内部定义。
9.
构造函数
FileStorage类的构造函数为:
cv::FileStorage(const string& source, int flags, const string& encoding=string());
参数:
source –存储或读取数据的文件名(字符串),其扩展名(.xml 或 .yml/.yaml)决定文件格式。
flags – 操作模式,包括:
FileStorage::READ 打开文件进行读操作
FileStorage::WRITE 打开文件进行写操作
FileStorage::APPEND打开文件进行附加操作
FileStorage::MEMORY 从source读数据,或向内部缓存写入数据(由FileStorage::release返回)
encoding – 文件编码方式。目前不支持UTF-16 XML 编码,应使用 8-bit 编码。
C++语法笔记
于 2023-04-16 19:29:07 首次发布
文章详细介绍了C++中的构造函数和析构函数,包括Vector的构造方式、析构函数的作用(释放内存),以及如何从用户输入读取整数数组。此外,还提到了C++11引入的lambda表达式和FileStorage类在文件操作中的应用。
摘要由CSDN通过智能技术生成