コンストラクション関数の詳細

5247 ワード

struct Sales_data
{
	friend Sales_data add(const Sales_data&, const Sales_data&);
	friend std::istream &read(std::istream&, Sales_data&);
	friend std::ostream &print(std::ostream&, const Sales_data&);


public:
	//      ,         
	Sales_data() = default;//      ,            ,                
	Sales_data(const std::string &s) :bookNo(s) {}//                          ,                      ,                  
	Sales_data(const std::string &s, unsigned n, double p) :bookNo(s), units_sold(n), revenue(p*n) {}//                    ,                      
	Sales_data(std::istream &);//         ,       
							   //             ,            ,              ;       ,           
	
	std::string isbn() const
	{
		return bookNo;
	}
	Sales_data& combine(const Sales_data&);//        ,              ,              Sales_data&   
	
private:
	double avg_price() const
	{
		return units_sold ? revenue / units_sold : 0;
	}
	std::string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};

//          
Sales_data::Sales_data(std::istream &is)
{
	read(is, *this);
}

//      
//1.          
Sales_data::Sales_data(const string& s, unsigned cnt, double price) {
	bookNo = s;
	units_sold = cnt;
	revenue = cnt * price;
}
//       
class ConstRef
{
public:
	ConstRef(int ii);


private:
	int i;
	const int ci;
	int& ri;


};


ConstRef::ConstRef(int ii)
{
	i = ii;
	//ci = ii;error:   const  
	//ri = i;error:ri     
}
//    ,                 ,      。。。     const、                     ,              




//2、        
class X {
	int i;
	int j;
public:
	//X(int val): j(val), i(j){};error:    
	X(int val) :j(val), i(val){}
};
//                       。          i,    j。。。       
//                 ,      .
//                        ,                 ,        




//      //
class sales_data {
public:
	sales_data(std::string s, unsigned cnt, double price):
		bookNo(s), units_sold(cnt), revenue(cnt*price){}
	sales_data():sales_data("", 0, 0){}		//        ;<=> sales_data() = default;                  
	sales_data(std::string s):sales_data(s,0, 0){}	//   :<=>sales_data("hello");<=>sales_data("hello", 0, 0);	
	sales_data(std::string &is):sales_data(){read(is, *this) }	//           sales_data(),                 ,            


private:
	std::string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};


//      //
class Account {
public:
	void calculate() { amount += amount * interestRate;}
	static double rate() { return interestRate; }
	static void rate(double);
private:
	std::string owner;
	double amount;
	static double interestRate;
	static double initRate();
};


double Account::interestRate = initRate();//          ,       ,           
//  initRate    ,             ,          。


void Account::rate(double newRate)
{
	interestRate = newRate;
}//              , static            ,         static。
//               ,                    。       ,          Account    
//  ,                 ,    this  。
//  ,           const ,    static      this  。




//          //
class account {
public:
	static double rate() { return interestRate; }
	static void rae(double);
private:
	static constexpr int period = 30;
	static double interestRate;
	double daily_tbl[period];
};
//                     ,             
constexpr int account::period;


//            ,         
class Bar {
public:
	//  Bar       ,  Bar          
private:
	static Bar mem1;
	Bar *mem2;
	//Bar mem3;  error:           
};
//                 ,            ,               
//      :