class Stock
{
char * pn;
int m;
}
Stock::Stock(const string & co, int num)
{
...
}
1. 显式地调用构造函数:Stock food = Stock("World Cabbage", 250);
2. 隐式地调用构造函数:Stock garment("Furry Mason", 50);
使用析构函数:
用构造函数创建对象后,程序负责跟踪对象,直到过期为止。对象过期时,程序将自动调用析构函数。
对象赋值:
与给结构赋值一样,在默认情况下,给类对象赋值时,将把一个对象的成员复制给另一个。C++将源对象的每个数据成员的内容复制到目标对象中相应的数据成员中。
Stock Stock1 = Stock("World Cabbage", 250);
Stock1 = Stock("Nify", 10);
由于Stock1对象已经存在,因此这条语句不是对Stock1进行初始化,而是将新值赋给它。这是通过让构造程序创建一个新的,临时的对象。然后将其内容复制给Stock1来实现。随后程序调用析构函数,以删除该临时对象。
void show() const;
Stock sotcks[4]={
Stock("A",1),
Stock("B",2),
Stock("C",3)
};
剩下一个默认初始化。
类作用域意味着不能从外部直接访问类的成员,公有成员函数也是如此。也就是说,要调用公有成员函数,必须通过对象。
作用域为类的常量
class A
{
private:
const int N = 4;
double cost[N];
}
这种做法是错误的,因为声明类只是描述了对象的形式,并没有创建对象。因此,在创建对象前,将没有用于存储值的控件。
实现办法:
1. 在类中声明一个枚举。在类声明中声明的枚举的作用域为整个类,因此可以用枚举为整型常量提供作用域为整个类的符号名称。
class A
{
private:
enum{Month = 12};
double cost[Month];
}
用这种方式声明枚举并不会创建类数据成员。也就是说,所有对象中都不包含枚举。另外,Month只是一个符号名称,在作用域为整个类的代码中遇到它时,编译器将用12来替换它。