C++ Primer Plus学习:第十章 对象和类(2)
2011-09-10 00:20
471 查看
构造函数
构造新对象、将值赋给它的数据成员
析构函数
用构造函数创建对象后,程序负责跟踪对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数
eg
stock1.h
stock1.cpp
usestpck1.cpp
小结
构造函数
在创建类对象时被调用,与类名相同。
用于初始化类成员
匹配参数的个数
若构造函数使用new,则必须通过使用delete的析构函数
Note
在默认情况下,将一个对象赋给另一个同类对象时,C++将源对象的所有数据成员内容复制到目标对象数据成员中
如果既可以通过初始化,又可以通过赋值来设置对象的值时,应该进量采用初始化的方式。效率更高
初始化:Stock stock1 = Stock();
赋值: Stock stock1; stock=Stock();
构造新对象、将值赋给它的数据成员
析构函数
用构造函数创建对象后,程序负责跟踪对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数
eg
stock1.h
#ifndef STOCK1_H_ #define STOCK1_H_ 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 = 0,double pr = 0.0); ~Stock(); void buy(int num,double price); void sell(int num,double price); void update(double price); void show(); }; #endif
stock1.cpp
#include <iostream> #include "stock1.h" 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(const char *co,int n,double pr) { std::cout<<"Constructor using "<<co<<" called\n"; 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<<"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; cout<<"Share Price:$ "<<share_val<<" Total Worth:$ "<<total_val<<endl; }
usestpck1.cpp
#include <iostream> //调用stock1.h头文件 #include "stock1.h" 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("NanoSmart",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 and stock2:\n"; stock1.show(); stock2.show(); cout<<"Using a constructor to reset an object\n"; stock1 = Stock("Nifty Foods",10,50.0); cout<<"Revised stock1:\n"; stock1.show(); cout<<"Done\n"; system("pause"); return 0; }
小结
构造函数
在创建类对象时被调用,与类名相同。
用于初始化类成员
匹配参数的个数
若构造函数使用new,则必须通过使用delete的析构函数
Note
在默认情况下,将一个对象赋给另一个同类对象时,C++将源对象的所有数据成员内容复制到目标对象数据成员中
如果既可以通过初始化,又可以通过赋值来设置对象的值时,应该进量采用初始化的方式。效率更高
初始化:Stock stock1 = Stock();
赋值: Stock stock1; stock=Stock();
相关文章推荐
- 2012/1/22 《C++ Primer Plus》第十章:对象和类 学习笔记
- 2012/1/22 《C++ Primer Plus》第十章:对象和类 学习笔记
- C++PrimerPlus第十章学习笔记——对象和类
- C++ Primer Plus学习:第十章 对象和类(3)
- C++ Primer Plus学习:第十章 对象和类(1)
- C++之类和对象——C++ primer plus学习(一)
- C++ Primer Plus学习:第十章
- 《C++ Primer Plus》第10章 对象和类 学习笔记
- C++ Primer Plus学习笔记之STL函数对象
- 【学习笔记】C++primer plus 10. 11. 12. 对象
- 《C++ Primer Plus(第六版)》(16)(第十章 对象和类 笔记和复习题答案)
- 《C++ Primer Plus(第六版)》(17)(第十章 对象和类 编程题答案)
- 学习C++.Primer.Plus 10 对象和类
- 【学习C++】C++ Primer Plus (第六版)第十章编程练习1-8
- 【《C++ Primer Plus》读书笔记】第10章 对象和类
- C++ Primer Plus(第六版)--学习杂记(第三章)
- 《C++ Primer Plus》第12章 类和动态内存分配 学习笔记
- C++ primer plus 学习笔记
- C++ Primer Plus学习:第一章
- C++ Primer Plus学习:第九章