构造函数
构造新对象、将值赋给它的数据成员
析构函数
用构造函数创建对象后,程序负责跟踪对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数
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();