C++学习笔记十五之类的构造函数和析构函数
来源:互联网 发布:全球tv直播软件 编辑:程序博客网 时间:2024/06/05 22:59
构造函数
- 构造函数是一种特殊的类成员函数,在类创建时被调用。构造函数的名称和类名相同,但通过函数重载,可以创建多个同名的构造函数,条件是每个函数的特征标(参数列表)都不同。另外,构造函数没有声明类型,没有返回值,也没有被声明为void类型。通常,构造函数用于初始化类对象的成员,初始化应与构造函数的参数列表相匹配
构造函数分为默认构造函数(不带参数)和带参数的构造函数。
默认构造函数是在未提供显式初始值时,用来创建对象的构造函数,可以在默认构造函数里初始化数据成员。
Class::Class()
{
a=0;
b="love";
}
有了默认构造函数就可以这样来创建对象:
Class abc;
因为没有参数所以不需要给对象赋初值。
非默认构造函数就是带有参数的构造函数,在创建对象时需要赋初值,也就是给参数赋值。
假设有一个构造函数:
Class::Class(int a,string &b)
{
............
}
在创建对象时就应该给对象赋初值
Class abc=Class(10,"abc");显式调用构造函数
或者
Class abc(10,"abc");隐式调用构造函数
或者
Class *abc=new Class(10,"abc");将构造函数和new一起使用
#注意:对象无法调用构造函数,因为构造函数是用来创建对象的,在构造函数构造出对象之前,对象是不存在的。
析构函数
- 用构造函数创建对象之后,程序负责跟踪该对象,直到过期为止。对象过期时,程序将自动调用一个特殊的成员函数---析构函数,用来完成清理工作,就像new和delete一样,一个负责分配内存,一个负责清理内存。和构造函数一样,析构函数没有返回值和声明类型,但是析构函数是没有参数的,一般析构函数不承担任何重要的工作,所以函数内部不需要编写任何操作的函数,声明析构函数时需要在类名前面加上~。
Class::~Class()
{
}
【代码示例】
#include <iostream>#include <string>#include <stdlib.h>//c语言版本#include <cstdlib>class Stock{private:std::string company;long shares;double share_val;double total_val;void set_tot() { total_val = shares * share_val; }public:Stock(); // default constructorStock(const std::string & co, long n = 0, double pr = 0.0);~Stock(); // noisy destructorvoid show();};// constructors (verbose versions)Stock::Stock() // default constructor{std::cout << "Default constructor called\n";company = "no name";shares = 0;share_val = 0.0;total_val = 0.0;}Stock::Stock(const std::string & co, long n, double pr){std::cout << "Constructor using " << co << " called\n";company = co;if (n < 0){std::cout << "Number of shares can't be negative; "<< company << " shares set to 0.\n";shares = 0;}elseshares = n;share_val = pr;set_tot();}// class destructorStock::~Stock() // verbose class destructor{std::cout << "Bye, " << company << "!\n";}// other methodsvoid Stock::show(){using std::cout;using std::ios_base;// set format to #.###ios_base::fmtflags orig =cout.setf(ios_base::fixed, ios_base::floatfield);std::streamsize prec = cout.precision(3);cout << "Company: " << company<< " Shares: " << shares << '\n';cout << " Share Price: $" << share_val;// set format to #.##cout.precision(2);cout << " Total Worth: $" << total_val << '\n';// restore original formatcout.setf(orig, ios_base::floatfield);cout.precision(prec);}int main(){{using std::cout;cout << "Using constructors to create new objects\n";Stock stock1("NanoSmart", 12, 20.0); // syntax 1,创建对象时,会自动调用相对应的构造函数stock1.show();Stock stock2 = Stock("Boffo Objects", 2, 2.0); // syntax 2stock2.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); // temp objectcout << "Revised stock1:\n";stock1.show();cout << "Done\n";}// std::cin.get();system("pause");return 0;}
阅读全文
0 0
- C++学习笔记十五之类的构造函数和析构函数
- C++学习笔记之类的构造函数
- C/C++学习笔记:String类的构造函数、析构函数和赋值函数
- python之类的构造和析构函数
- python之类的构造和析构函数
- C++函数之类的构造函数析构函数
- C++函数之类的构造函数与析构函数
- 【C++】学习笔记四十七——类的构造函数和析构函数
- 学习笔记之类的数据成员指针和函数指针
- Objective-C学习笔记---构造函数和析构函数
- Objective-C学习笔记---构造函数和析构函数
- 学习C++——构造函数和析构函数
- c#学习笔记-构造函数和析构函数
- C++学习笔记1:构造函数和析构函数
- C#学习笔记9-构造函数和析构函数
- c++学习笔记之构造函数和析构函数
- c++学习笔记(十二):构造函数和析构函数
- c++之类的构造函数
- 洛谷P3368 【模板】树状数组 2
- java服务器两种方式接收数据
- Hankson的趣味题
- linux递归删除build目录
- 矩阵
- C++学习笔记十五之类的构造函数和析构函数
- sdl从sdl_renderer读出数据,然后构造一个sdl_surface
- gcvt字符串转换函数应用实例
- PB常用事件
- 使用Postman模拟传入json字符串测试代码
- 4 Tesseract-ocr 系列 : 开源OCR比较
- HDU6112-今夕何夕
- B树、B-树、B+树、B*树
- android6.0获取蓝牙mac地址 但获取到02:00:00:00:00:00 解决方法