在c++中如何调用数组对象的构造函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c++中如何调用数组对象的构造函数相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<string>
using namespace std;

//对象数组的初始化请看该函数
class student

public:
student(string name)

m_strname=name;

student()
void display()

cout<<"student name:"<<m_strname<<endl;

private:
string m_strname;
;

void main()

student stu[3]=student("zhangsan"),student("lisi");
stu[0].display();
stu[1].display();


//深入了解构造和析构函数过程参看该函数!
#include<iostream>
using namespace std;

class study

private:
int num;
public:
study()

cout << "study default constructing^" << endl;

study(int a)

num = a;
cout << "study constructing^ " << num << endl;

~study()

cout << "study desctructing^" << endl;

;

void main()

study example[5] = study(1),study(2),study();
参考技术A #include<iostream>
#include<string>
using
namespace
std;
//对象数组的初始化请看该函数
class
student

public:
student(string
name)

m_strname=name;

student()
void
display()

cout<<"student
name:"<<m_strname<<endl;

private:
string
m_strname;
;
void
main()

student
stu[3]=student("zhangsan"),student("lisi");
stu[0].display();
stu[1].display();

//深入了解构造和析构函数过程参看该函数!
#include<iostream>
using
namespace
std;
class
study

private:
int
num;
public:
study()

cout
<<
"study
default
constructing^"
<<
endl;

study(int
a)

num
=
a;
cout
<<
"study
constructing^
"
<<
num
<<
endl;

~study()

cout
<<
"study
desctructing^"
<<
endl;

;
void
main()

study
example[5]
=
study(1),study(2),study();
参考技术B book books[2]=book(1001,"C++面向对象程序设计","谭浩强"),book(1002,"数据结构","严蔚敏");
其中book是类

函数调用或构造函数调用中的 C++ 数组初始化

【中文标题】函数调用或构造函数调用中的 C++ 数组初始化【英文标题】:C++ Array Initialization in Function Call or Constructor Call 【发布时间】:2010-04-20 16:09:52 【问题描述】:

这个问题与帖子here有关。是否可以在函数调用或构造函数调用中初始化数组?例如,类 foo 的构造函数想要一个大小为 3 的数组,所以我想调用 foo( 0, 0, 0 )。我已经尝试过了,但它不起作用。我希望能够在其他对象的构造函数初始化列表中初始化 foo 类型的对象,或者在不首先创建单独的数组的情况下初始化 foo。这可能吗?

【问题讨论】:

先说数组初始化,突然就需要初始化一个类对象。那么你需要初始化什么:一个数组对象还是一个类对象? 初始化一个类是我用作示例的一个具体案例,也是我提出这个问题的原因。但是,您也可以有一个函数 foo,它接受一个大小为 3 的数组并希望将其称为: foo( 0, 0, 0 )。我已经更改了 OP 以使其更加明显。 是的,但是您仍然在问“是否可以在不分配数组的情况下对其进行初始化?”。嗯,是的,这是可能的。例如,int a[10] = 5 初始化一个数组而不分配它,就像你问的那样。然而,这看起来不像你真正感兴趣的东西。 我明白你在说什么。我当时认为 a[] = 5 是一项任务。但是,您说得对,事实并非如此。我已经更新了帖子标题。 "没有先创建一个单独的数组" 【参考方案1】:

不在当前标准中。这将在 C++11 中成为可能

在 gcc 中,您可以使用强制转换来强制创建时间,但它不是标准 c++ (C99):

typedef int array[2];
void foo( array )   // Note: the actual signature is: void foo( int * )
int main() 
   foo( (array) 1, 2  );

【讨论】:

这在 C99 中有效,但在 C++03 中无效(在 C++0x 中也不 - 这是一个复合文字)。 代码可以使用 (macports) gcc 到 4.6; gcc 4.7 报告error: taking address of temporary array C++11 是当前标准,所以这个答案需要更新。【参考方案2】:

如果您的设计允许,您可以考虑将数据包装在一个类中,并在默认构造函数中初始化为 0(或您选择的任何值)

【讨论】:

以上是关于在c++中如何调用数组对象的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

c++,类的对象作为形参时一定会调用复制构造函数吗?

C++对象数组与对象指针

C++类-手动调用构造函数

C++类-手动调用构造函数

使用构造函数将数组传递给对象后,值已更改(在 c++ 中)。我想不通为啥

在c++中如何用new生成一个构造函数带参数的类数组?