C++ 类包含类的问题

[复制链接]
查看11 | 回复4 | 2010-5-14 16:09:58 | 显示全部楼层 |阅读模式
请看:
class ball
{
public:
ball(string str);
private:
string name;
};
ball::ball(std::string str)
{

name=str;
}
class mystring
{
public:
ball b(string);
mystring(mystring& str)
{
//b("aaa");
data=new char[strlen(str.data)+1];
strcpy(data,str.data);
}
mystring(const char* value)

{

if(value)

{
data=new char[strlen(value)+1];
strcpy(data,value);

}

else

{
data=new char[1];
*data='\0';

}

}

~mystring();
private:
char* data;
};
int main()
{
mystring str("aaaaaaaa");
str.vint.push_back(1);
}
这个类里包含一个ball类类型的变量 b(string);注意是b(string),
这个类没有默认构造函数, 不知道如何在实例化mystring的时候
构造ball类型的b呢?
不知道我表达清楚了吗?求C++高手解答。。。
我之所以是public是因为需要操作这个类成员。我知道这样写没问题:
成员变量改为ball b, 可以在mystring类的构造函数初始化b:
mystring(mystring& str):b("aaa")
{
//b("aaa");
data=new char[strlen(str.data)+1];
strcpy(data,str.data);
}
但是写成ball b(string)就不行了,是什么原因啊?

回复

使用道具 举报

千问 | 2010-5-14 16:09:58 | 显示全部楼层
ball b(string);的作用是定义类mystring的一个成员函数,函数名为b,接受参数为string,返回值为ball,并不是像你想象的定义一个用string初始化的变量b
回复

使用道具 举报

千问 | 2010-5-14 16:09:58 | 显示全部楼层
string 类已经帮你实现了
回复

使用道具 举报

千问 | 2010-5-14 16:09:58 | 显示全部楼层
其实...你没发现,在mystring种其实一直都没有用到b么?
回复

使用道具 举报

千问 | 2010-5-14 16:09:58 | 显示全部楼层
ball类有一个你实现的构造函数,那么没有默认构造函数,你的变量b(string)是把string作为std::string类型的对象来初始化b的。OK,这没有问题,问题是:1.为什么要在public里面定义类成员变量 //而不是在private中申明2.为什么要在MyString构造函数中赋值,而不是在初始化列表中进行!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行