在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++中如何调用数组对象的构造函数的主要内容,如果未能解决你的问题,请参考以下文章