您的位置:首页 > 编程语言 > C语言/C++

C++ Primer Plus学习:第十章 对象和类(2)

2011-09-10 00:20 471 查看
构造函数

构造新对象、将值赋给它的数据成员

析构函数

用构造函数创建对象后,程序负责跟踪对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数

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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: