2020/3/4
网课+作业:5小时
cf:2小时
树哈希知识学习:1小时
英语单词:1小时
回顾c++第10章:1小时
#include"iostream" #include"cstring" class Stock { private: char company[30]; int shares; double share_val; double total_val; void set_tot(){///类声明常将短小的成员函数作为内联函数 total_val = shares * share_val; } public:///定义于类声明中的函数都将自动成为内联函数 Stock(); Stock(const char *co,int n,double pr);///构造函数 ~Stock();///析构函数 void buy(int num,double price); void sell(int num,double price); void update(double price); void show(); const Stock & topval(const Stock & s) const; }; Stock :: Stock(const char * co,int n,double pr) { // std::cout << "Constructor using " ; std::strncpy(company,co,29); company[29] = '\0'; if(n < 0) { std :: cerr << "Number of shares can't be negative. " << company << " shares set to 0.\n"; shares = 0; } else shares = n; share_val = pr; set_tot(); } Stock :: Stock() { std :: cout <<" Default constructor called\n"; std :: strcpy(company,"no name"); shares = 0; share_val = 0.0; total_val = 0.0; } Stock :: ~Stock() { std :: cout << "Bye, " << company << "!\n"; } void Stock :: buy(int num,double price) { if(num < 0) { std:: cerr<<"Number of shares purchased can't be negative. " << "Transaction is aborted.\n"; } else { shares += num; share_val = price; set_tot(); } } void Stock::sell(int num,double price) { using std::cerr; if(num < 0) { cerr << "Number of shares sold can't be negative." << "Transaction is aborted.\n"; } else if(num > shares) { cerr << "You can't sell more than you have! " << "Transaction is aborted.\n"; } else { shares -= num; share_val = price; set_tot(); } } void Stock :: update(double price) { share_val = price; set_tot(); } void Stock::show() { using std :: cout; using std :: endl; cout << "Company: " << company << " Shares: " << shares << endl <<" Share Price: $" << share_val << " Total Worth: $" << total_val << endl; } const Stock & Stock :: topval(const Stock & s)const { if(s.total_val > total_val) return s; else return *this; } int main() { using std :: cout; using std :: ios_base; cout.precision(2); cout.setf(ios_base :: fixed,ios_base :: floatfield); cout.setf(ios_base::showpoint); cout << "Using constructors to create new objects\n"; Stock stock1("NanoSmark",12,20.0); stock1.show(); Stock stock2 = Stock("Boffo Objects",2,2.0); stock2.show(); cout << "Assigning stock1 to stock2: \n"; stock2 = stock1; cout << "Listing stock1 ans stock2: \n"; stock1.show(); stock2.show(); cout << "Using a constructor to reset an object\n"; stock1 = Stock("Nofty Foods",10,50.0);///这里注意,因stock1是有值了的 ///所以这里并不是stock1再次调用构造函数,而是有一个匿名对象赋值给 ///stock1,赋值完成后,该匿名对象执行析构函数 cout << "Revised stock1: \n"; stock1.show(); cout << "Done\n"; const Stock land = Stock("Kludgehorn Properties"); //land.show();///注意这条语句会出错,因为无法保证,show函数,不对land进行更改 ///除非在定义show()函数的时候定义为:void show() const;保证函数不会修改调用对象 return 0; }