1.构造函数:
●作用:专门用于构造新对象,给新对象赋予初值
●特点:没有返回值,返回值也不是void类型,如 Stock::Stock(string & com,long shar);这样
●原型位于类声明的public部分
●程序声明对象时,会自动调用构造函数
●构造函数的参数名不能与类的成员相同,否则容易引起混乱,为避免混乱,通常有两种方法
☉将类的数据成员的名称前加m_前缀
class Stock
{
private:
string m_company;
long m_shares;
...
}
☉将类的数据成员的名称后加_后缀
class Stock
{
private:
string company_;
long shares_;
...
}
●调用构造函数的方法
☉显式调用:
Stock food = Stock("World Cabbage", 250, 12.3);
☉隐式调用:
Stock food("World Cabbage", 250, 12.3);
●构造函数是用来创建对象的,不能用来被对象调用
●如果我们没有定义构造函数,则编译器帮我们提供默认构造函数
●只有当我们没有定义构造函数时,编译器才会帮我们提供构造函数;当我们定义了构造函数时,我们必须也提供默认构造函数,不然当出现如下定义时会出错 Stock stock;当出现这样定义对象时会出错,因为定义对象时就会自动调用构造函数,而我们定义的构造函数有参数,这时就会出错
●定义默认构造函数的方法有两种
☉给已有构造函数的所有参数提供默认值
Stock::Stock(const string & comp = "No name", long shares = 0, float price = 0);
☉是构造函数没有参数
Stock::Stock();
●对象过期时,程序将调用析构函数,析构函数完成清理工作。
●析构函数没有参数,没有返回值,在类名前加上~就构成了析构函数。 如 ~Stock();
●通常不应在代码中显式的调用析构函数。如果创建的是静态对象,则析构函数在程序结束时自动调用。如果是用new创建的动态对象,则析构函数在程序使用delete释放内存时自动调用
●如果程序中我们没有定义析构函数,则编译器会提供一个默认析构函数
3.构造函数、析构函数使用实例:
文件结构:
stock10.h代码:
#ifndef STOCK10_H_INCLUDED
#define STOCK10_H_INCLUDED
#include <string>
using namespace std;
class Stock
{
private:
string company;
long shares;
float price;
float total;
void setTotal()
{
total = shares * price;
}
public:
Stock(); //默认构造函数
Stock(const string & comp, long shar, float pric); //构造函数
~Stock(); //析构函数
void buy(long shar, float pric);
void sell(long shar, float pric);
void show();
};
#endif // STOCK10_H_INCLUDED
stock10.cpp代码:
#include <iostream>
#include "stock10.h"
using namespace std;
Stock::Stock() //定义默认构造函数
{
company = "No name";
shares = 0;
price = 0.0;
setTotal();
}
Stock::Stock(const string & comp, long shar, float pric) //定义构造函数
{
company = comp;
shares = shar;
price = pric;
setTotal();
}
Stock::~Stock() //析构函数
{
}
void Stock::buy(long shar, float pric)
{
if(shar < 0)
cout << "Cannot buy a nagitive number of shares.\n";
else
shares += shar;
price = pric;
setTotal();
}
void Stock::sell(long shar, float pric)
{
if(shar < 0)
cout << "Cannot sell a nagitive number of shares.\n";
else if(shares < shar)
cout << "Cannot sell a larger number of shares.\n";
else
shares -= shar;
price = pric;
setTotal();
}
void Stock::show()
{
cout << "Company : " << company << endl;
cout << "Shares : " << shares << endl;
cout << "Price : " << price << endl;
setTotal();
cout << "Total : " << total << endl << endl;
}
main.cpp代码:
#include <iostream>
#include "stock10.h"
using namespace std;
int main()
{
Stock wlu = Stock("Coo.liu", 1200, 12.3); //调用构造函数
wlu.show();
Stock flutty; //调用默认构造函数
flutty.show();
flutty.buy(1000, 13.2); //调用buy这个函数
flutty.show();
flutty.sell(500, 14.3);
flutty.show();
return 0;
}
运行结果: