C++ Primer 学习笔记_23_函数(续2) --局部对象、内联函数、类的成员函数(二)

2014-11-24 11:48:55 · 作者: · 浏览: 1
局对象,或定义为静态局部对象,则将这些成员初始化为0,不然,则不提供这些成员的初始化工作,这些成员没有初始化!


【建议:】

合成的默认构造函数一般适用于仅包含类类型成员的类。而对于含有内置类型或复合类型成员的类,则通常应该定义他们自己的默认构造函数初始化这些成员。


5、类代码文件的组织【摘抄】

通常情况下,将类的声明放置在头文件中,在类外定义的成员函数放置在源文件中,C++程序员习惯使用一些简单的规则给头文件及其关联的类定义代码命名。类定义应置于名为type.h或type.H的文件 中,type指在该文件中定义的类的名字。成员函数的定义则一般存储在与类同名的源文件中。依照这些规则,我们将类Sales_item放在名为Sales_item.h的文件中定义。任何需使用这个类的程序,都必须包含这个头文件。而Sales_item的成员函数的定义则应该放在名为Sales_item.cc的文件中。这个文件同样也必须包含Sales_item.h头文件。

//P227 习题7.31
class Sales_item
{
public:
    Sales_item():units_sold(0),revenue(0) {};
    double avg_price() const;
    bool same_isbn(const Sales_item &rhs) const;

    void scan();
    void print() const;

private:
    std::string isbn;
    unsigned int units_sold;
    double revenue;
};

bool Sales_item::same_isbn(const Sales_item &rhs) const
{
    return (this -> isbn == rhs.isbn);
}
double Sales_item::avg_price() const
{
    if (units_sold)
        return (this -> revenue) / (this -> units_sold);
    else
        return 0;
}

void Sales_item::scan()
{
	cout << "Please input the isbn、units_sold & price" << endl;
	double price;
	cin >> isbn >> units_sold >> price;
	revenue += units_sold * price;
}

void Sales_item::print() const
{
	cout << "ISBN: " << isbn << endl;
	cout << "Units_sold: " << units_sold << endl;
	cout << "Revenue: " << revenue << endl;
	cout << "Avg_price: " << avg_price() << endl;
}

int main()
{
//	freopen("input.txt","r",stdin);
	Sales_item item;
	item.scan();
	item.print();
}