首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++类初始化有关问题

2012-06-11 
C++类初始化问题!下面是有问题的代码:在没有构造函数时:#include string#include iostreamusing names

C++类初始化问题!
下面是有问题的代码:
在没有构造函数时:
#include <string>
#include <iostream>
using namespace std;
class Fruit //定义一个类,名字叫Fruit
{
public: //标号,表示这个类成员可以在外部访问
string name;  
void print() //定义一个输出名字的成员print()
{
cout<< name<<endl;
}
};
int main()
{
Fruit apple = {"apple"}; //定义一个Fruit类对象apple
apple.print(); //使用apple的成员print
return 0;
}

在C-Free中能正确运行,并输出apple,但在VC6中不能通过编译,这个不知道是为什么?

当加上构造函数时,C-Free也通不过编译了?
#include <string>
#include <iostream>
using namespace std;
class Fruit //定义一个类,名字叫Fruit
{
public: //标号,表示这个类成员可以在外部访问
string name;
// Fruit(string str); //定义一个name成员  
void print() //定义一个输出名字的成员print()
{
cout<< name<<endl;
}
};
Fruit::Fruit(string str) //构造函数
{
name=str;
cout<<"called"<<endl;
}
int main()
{
Fruit apple = {"apple"}; //定义一个Fruit类对象apple
Fruit apple("apple");
apple.print(); //使用apple的成员print
return 0;
}
有谁知道了详细解释下吧!非常感谢!!!

[解决办法]
Fruit apple = {"apple"}; //定义一个Fruit类对象apple


这是什么????

问题有点多了,建议你去看看构造函数和操作符重载
[解决办法]
之前没有构造函数的时候,编译器会生成一个默认构造函数,
Fruit apple = {"apple"};
这句就是实例化一个对象,然后进行初始化,其实这种初始化是为了保持与C 的兼容。在C中可以使用类似的方法对struct进行初始化,而在C++中class和struct的一样的(有些小差别),所以C++中的类可以使用这种方式,但是这种方式的使用也是有限制的,具体我记不清了。
后来你加上构造函数之后,编译器就不再生成默认构造函数了,
如果你继续
Fruit apple = {"apple"};
这一句的话,编译器会报错,因为这儿需要一个不需要参数的构造函数,而你的类中没有,只有一个带string参数的构造函数,所以编译器会报错。
你可以这样写构造函数:
为该构造函数添加默认参数
Fruit(string str="apple");

ps:你的构造函数需要在类中声明一下

[解决办法]
++
或者再添加一个无参构造函数,比如
Fruit(){}
总而言之,需要提供一个不需要传入参数就能构造的构造函数,比如2楼的提供默认值的方法,或者提供无参构造函数。

探讨
之前没有构造函数的时候,编译器会生成一个默认构造函数,
Fruit apple = {"apple"};
这句就是实例化一个对象,然后进行初始化,其实这种初始化是为了保持与C 的兼容。在C中可以使用类似的方法对struct进行初始化,而在C++中class和struct的一样的(有些小差别),所以C++中的类可以使用这种方式,但是这种方式的使用也是有限制的,具体我记不清了。
后来你加上构造函……

[解决办法]
强烈建议楼主看下类的构造函数这里。因为你的错误比较多的都是关于这方面的。
自己加默认构造函数吧
[解决办法]
探讨

强烈建议楼主看下类的构造函数这里。因为你的错误比较多的都是关于这方面的。
自己加默认构造函数吧

热点排行