问:类实例和类对象有何不同?

答:基本上就是一回事咯。实例化类的时候,将获得一个实例,它也被称为对象。

问:要访问成员,可使用句点运算符(.,也可以使用指针运算符(->.那哪种方式更好嘞?

答:如果有一个指向对象的指针,使用指针运算符最合适;如果栈中实例化了一个对象,并将其存储到了一个局部变量中,则使用句点运算符最合适。

问:是不是每次都需要写一个复制构造函数?

答:如果类的数据成员是设计良好的智能指针、字符串类或STL容器(如std::vector),则编译器生成的默认复制构造函数将调用成员的复制构造函数。然而,如果类包含原始指针成员(如使用 int*而不是std::vector表示的动态数组),则需要提供设计良好的复制构造函数,确保将类对象按值传递给函数时进行深复制,创建该数组的拷贝。

问:我的类只有一个构造函数,它接受一个有默认值的参数。那这个构造函数是默认构造函数吗?

答:完全正确。只要在不提供参数的情况下创建实例,就可以认为这个类有默认构造函数。每个类都只能有一个默认构造函数。

问:在复制构造函数中,为何将指向源对象的引用作为参数?

答:这是编译器对复制构造函数的要求。其原因是,如果按值接受源对象,复制构造函数将调用自己,导致没完没了的复制循环。

以下补充几个简单的类:

只能有一个实例的单例类:

class president

{

private

president(){};

president(const president&);

sonst president& operator=(const president&);

String name;

public:

static president& GetInstance()

{

static president OnlyInstance;

return OnlyInstance;

}

string GetName()

{

return name; 

}

void SetName(string InputName)

{

name = InputName;

}

};

不允许复制的类:

class president

{

private:

president (const president&);

president& operator=(const president&);

}; 

禁止在栈中实例化的类:

class MonsterDB

{

private:

~MonsterDB();

};