C++中创建类对象时出现问题

2024-05-10 03:21

1. C++中创建类对象时出现问题

第一种,是调用带参数的构造函数,显而易见,你定义的是一个带三个参数的构造函数,没问题,OK。

第二种,是调用的是不带参数的构造函数,不定义的话,编译器会默认一个,没问题,OK。
第三种,调用的是复制构造函数,没定义的话,编译系统也会自动提供一个默认的复制构造函数,但只是简单地复制类中每个数据成员,定义的话,就会调用是你自己的。
第四种,这种定义类对象,是错误的语法,只有在调用带参数的构造函数创建对象时,才会用括号()把参数传进去,如果想调用无参数的构造函数创建对象,是不能带括号的,所以编译器会报错。

C++中创建类对象时出现问题

2. 如果不定义构造函数,编译器给出的默认构造函数一样么,这时定义的对象怎么赋值?

构造函数是编译器提供的一个接口供程序员选择,在创建对象时按需要初始化成员变量。当然你也可以不通过构造函数初始化,选择在创建对象后,通过公开成员变量由外部程序赋值,或者你也可以编写相应的函数进行赋值,具体怎么做由程序员决定。
 
当没有定义构造函数时,系统提供一个默认构造函数(隐含的),只是为了满足接口需要,不做任何事情。
比如:
class MyClass {    //MyClass()//无参构造函数,你可以不用    //MyClass(const MyClass &other )//拷贝构造函数,你可以不用public:  int nValue;//你可以选择公开成员变量      void SetValue(int val)//也可以定义设置函数  {     nValue=val;  }}//那么void main(){   MyClass A;   A.nValue=10;//创建对象后设置值   A.SetValue(10);//或者通过函数设置值} 
初始化是否采用构造函数看你需要,如果你的成员变量是个确定值(每个对象都一样),可以将成员变量定义为常量,或者在构造函数中初始化,那么创建对象后,对象的成员变量就自动被赋值,后面赋值语句就不用写了,如果你的成员变量需要在运行时确定,或者每个对象的值不一样,就是值不确定。那么就不使用构造函数,而在需要的时候赋值。