C++申请类数组要怎么构造函数?

class MyString{private: string s; int sum;public: MyString() {} MyString(char *p) { sum=0; s=p; int i; for(i=0;i<s.length();i++) sum+=(s[i]-0); } friend MyString operator>(MyString &,MyString &); void show() {cout<<s<<" "<<sum<<endl;}};MyString operator>(MyString &A,MyString &B){ if(A.sum>=B.sum) return A; else return B;}
这是定义的类,然后错误如下图

c++中申请类数组的构造函数定义如下:

#include <iostream>
using namespace std;

class MyClass {
int x;
public:
void setX(int i) { x = i; }
int getX() { return x; }
};

int main()
{
MyClass obs[4];
int i;

for(i=0; i < 4; i++)
obs[i].setX(i);

for(i=0; i < 4; i++)
cout << "obs[" << i << "].getX(): " << obs[i].getX() << "\n";

return 0;
}
运行结果:
obs[0].getX(): 0
obs[1].getX(): 1
obs[2].getX(): 2
obs[3].getX(): 3
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-03-26
你定义a[5]的时候5个类对象已经用无参的构造函数初始化了,后面再用有参的构造初始化当然不行了。
可以在a[5]={"...","...",....};这样初始化,或者专门定义一个初始化函数这样用a[1].chushi("......");本回答被网友采纳
第2个回答  推荐于2017-10-10
#include <iostream>

using namespace std;
///
class MyString
{
private:
 string s;
 int sum;
public:
 MyString() {}
 MyString(char *p)
 { sum=0;
   s=p;
   int i;
   for(i=0;i<s.length();i++)
    sum+=(s[i]-0);
 }
 MyString(const MyString& ins)
 {
    this->sum = ins.sum;
    this->s = ins.s;
 }
friend MyString operator>(MyString &,MyString &);
void show() {cout<<s<<" "<<sum<<endl;}
};
MyString operator>(MyString &A,MyString &B)
{
 if(A.sum>=B.sum) return A;
 else return B;
}
///
int main()
{
    //cout << "Hello world!" << endl;
    MyString arr[5];
    arr[1]="123qwe";
    arr[1].show();
    return 0;
}

追问

好厉害..能解释下这个吗?
MyString(const MyString& ins)
{
this->sum = ins.sum;
this->s = ins.s;
}
没学太懂

追答

你百度一下:复制构造函数 或者 拷贝构造函数

本回答被提问者采纳

C++ 派生类构造函数的调用顺序的一道题目
首先:“类A的默认构造函数 类A的默认构造函数 类B的默认构造函数 类A的默认构造函数 类A的默认构造函数 类B的默认构造函数”来自B b1[2]; 的定义 “类A的构造函数 类A的构造函数 类B的构造函数 类B的析构函数 类A的析构函数 类A的析构函数"是源自b1[0]=B(1,2,3); 的初始化,注...

C++构造函数和析构函数详解
在上一个章节我们在创建好类的对象之后,首先对它的每一个成员属性赋值之后再对它们进行输出操作,如果不赋值就输出,这些值就会是垃圾值。而为了代码的简介,一次性为所有成员属性初始化,C++的类提供了这样的一个函数—构造函数。C++提供构造函数来处理对象的初始化。1、构造函数是一种特殊的成员...

C++类的问题,构造函数和析构函数
C(k) ---> 调用类 C的构造函数C(int k){cout<<"C ";} --->输出字符 C a(i) --->a是A类的对象引用,调用类 A 的构造函数A(int i){cout<<"A ";} --->输出字符 A b(j) --->b是B类的对象引用,调用类 B的构造函数B(int j){cout<<"B ";} --->输出字符...

c++~ 请问在类里面构造函数必须是public吗 可以定义到private吗_百度知...
1、首先拷贝构造函数是一种特殊的构造函数,函数名与类名相同,它的一个参数必须是本类型的一个引用变量,无函数类型、返回值。2、对象通过另一个对象初始化。3、运行如下图所示。4、接着输入函数的参数为类对象。5、运行结果,如下图所示,就完成了。

类的设计,构造函数和析构函数 c\/c++
一、类的设计 1.类的声明 class 类名 { private: \/\/私有 ...public: \/\/公有 ...};2.类的成员 一般在C++类中,所有定义的变量和函数都是类的成员。如果是变量,我们就叫 它数据成员如果是函数,我们就叫它成员函数。3.类成员的可见性 private和public访问控制符决定了成员的可见性。由一个...

在c++中如何用new生成一个构造函数带参数的类数组?
2.C++ new用法之一 new运算符 最常用的是作为运算符的new,比如:string *str = new string(“test new”);作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。new会在堆上分配一块内存,并会自动调用类的构造函数。C++ new用法之二 new函数 第二种就是new函数,...

C++中用new运算符创建一个类的数组指针会调用类的构造函数吗
当然会执行,不论是什么情况,只要你实例化了一个类也就是当你创建了一个对象时,就会自动调用构造函数。

C++ 类中的类成员变量怎么调用带参数的构造函数来初始化?
要调用带参的构造函数,必须这样做:include "stdafx.h"class A { public:A(){ax = 0;};A(int a){ax = a;};int ax;};class B { public:\/***\/ B(int b) : bx(b) \/\/这样调用 { } B() : bx(0) \/\/这样也行 { } \/***\/ void print(){ printf("%d", bx.ax)...

C+++给一个类的构造函数传一个数组,怎么弄?
struct stu{ char name[10];int math;};class student{ public:student(stu stu[]){ for(int i=0;i<10;i++)num[i]=stu[i];} void display(){ for(int i=0;i<5;i++){ cout<<num[i].name<<" : "<<num[i].math<<endl;} } stu num[10];};int main(){ stu num[10]...

...在子类构造函数初始化列表里调用基类构造函数?
\/\/如果基类没有默认构造函数,则子类的构造函数必须要给定基类的构造函数参数。因为,在类的实例化时是先执行基类构造函数在执行子类构造函数。子类构造函数初始化列表后面直接列出基类构造函数即可,系统会自动调用,不用用户调用。class A{ public:A(int x,int y):x(x),y(y){} private:int x; ...

相似回答