C++ Primer Plus学习:第十章 对象和类(2)
来源:互联网 发布:mac玫红色口红哪个最火 编辑:程序博客网 时间:2024/06/16 17:00
构造函数
构造新对象、将值赋给它的数据成员
析构函数
用构造函数创建对象后,程序负责跟踪对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数
eg
小结
构造函数
在创建类对象时被调用,与类名相同。
用于初始化类成员
匹配参数的个数
若构造函数使用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();
- C++ Primer Plus学习:第十章 对象和类(2)
- C++ Primer Plus学习:第十章 对象和类(1)
- C++ Primer Plus学习:第十章 对象和类(3)
- 2012/1/22 《C++ Primer Plus》第十章:对象和类 学习笔记
- 【C Primer Plus】第十章 数组和指针(一)
- 【C Primer Plus】第十章 数组和指针(二)
- C primer plus 第十章 练习2:
- c primer plus 第十章
- C primer plus 第十章
- c primer plus 第十章学习梳理小结
- 《C++ Primer Plus(第六版)》(16)(第十章 对象和类 笔记和复习题答案)
- 《C++ Primer Plus(第六版)》(17)(第十章 对象和类 编程题答案)
- Primer plus C++ 第十章 对象和类_类的设计
- 【学习C++】C++ Primer Plus (第六版)第十章编程练习1-8
- C primer plus 第十章 例题疑问(清单10.18):
- C++Primer Plus(第六版) 第十章 第八题
- 《C Primer Plus》第十章编程题
- c primer plus 第十章答案
- 三层构架
- Effective c++学习笔记——条款08:别让异常逃离析构函数
- li{ star : expression(onmouseover=function()
- 报格志测试培训课程,送《软件测试技术大全》第二版!
- hdu 4011.Working in Beijing
- C++ Primer Plus学习:第十章 对象和类(2)
- 近期笔试题C/C++---2
- 表达式计算
- 存储器映射归纳
- 如何设置linux操作系统以root用户登录?
- Android APN设置及获得手机号
- Python3写的小工具,类似Linux的alias给程序起别名
- Android 判断当前网络 wifi ctwap(cmwap) ctnet(cmnet)
- android WebView使用cmwap无法联网解决办法