对象2 构造,析构

#include <iostream>
#include <string>
#include <fstream>

class StoreQuote
{
public:
    std::string quote, speaker;
    std::ofstream fileOutput;

    StoreQuote();
    ~StoreQuote();

    void inputQuote();
    void inputSpeaker();
    bool write();
};

StoreQuote::StoreQuote()
{
    fileOutput.open("test.txt", std::ios::app);
}

StoreQuote::~StoreQuote()
{
    fileOutput.close();
}

void StoreQuote::inputQuote()
{
    getline(std::cin, quote);
}

void StoreQuote::inputSpeaker()
{
    getline(std::cin, speaker);
}

bool StoreQuote::write()
{
    if(fileOutput.is_open())
    {
        fileOutput << quote << "!" << speaker << std::endl;
        return true;
    }
    else
    {
        return false;
    }
}

int main()
{
    StoreQuote sq;

    sq.inputQuote();
    sq.inputSpeaker();

    if(sq.write())
    {
        std::cout << "write ok" << std::endl;
    }
    else
    {
        std::cout << "write err" << std::endl;
    }
}
/* vim: set ts=4 sw=4 sts=4 tw=100 */
时间: 2024-10-07 05:27:04

对象2 构造,析构的相关文章

构造 &amp; 析构 &amp; 匿名对象&zwj;

?以前仅知道创建对象,但对匿名对象的了解基本为0. 通过阅读google chromium源代码 中关于 log 的使用,查阅相关资料,了解了一下匿名对象,予以记录. 什么是匿名对象? 匿名对象可以理解为是一个临时对象,一般系统自动生成的,如你的函数返回一个对象,这个对象在返回时会生成一个临时对象. #include <iostream> class myclass {public:  myclass()  {    std::cout << "构造函数" &l

C++ 派生类对象的构造与析构过程

C++ 派生类对象的构造与析构过程 因为基类的成员变量和派生类的成员变量在内存中的连续的(下面程序会验证这一点),如下图所示: 所以构造派生类对象的时候,构造成员变量的过程就像入栈一样: 那么很自然,派生类对象析构的时候就是出栈的过程,先进后出,后进先出: 下边一个简单的程序验证这个结论: #include <iostream> using namespace std; class base{ int a; public: base(const int& a):a(a){cout<

Effective C++笔记:构造/析构/赋值运算

条款05:了解C++默默编写并调用哪些函数 默认构造函数.拷贝构造函数.拷贝赋值函数.析构函数构成了一个类的脊梁,只有良好的处理这些函数的定义才能保证类的设计良好性. 当我们没有人为的定义上面的几个函数时,编译器会给我们构造默认的. 当成员变量里有const对象或引用类型时,编译器会不能合成默认的拷贝赋值函数:当一个基类把它的拷贝赋值函数定义为private时,它的派生类也不无生成默认的拷贝赋值函数,因为它无法完成基类成份的赋值. 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 将拷贝构

C++ map.insert 传参类型不同,构造/析构次数不同

1. 传参方式 使用 insert 为 map 插值时,insert 的传参包含以下几种可能: make_pair 生成对象 pair(key_type, value_type) 生成对象 pair(const key_type, value_type) 生成对象 map<key_type, value_type>::value_type 生成对象 不同的传参,导致不同次数的构造 / 析构函数调用. 2. 测试代码与结果 /* 在 map 中不同的 insert 传参类型,导致的不同次数的构造

c++笔记:const、初始化、copy构造/析构/赋值函数

构造函数 Default构造函数:可被调用而不带任何实参的构造函数,没有参数或每个参数都有缺省值.如: class A { public: A(); }; 将构造函数声明为explicit,可阻止它们被用来执行隐式类型转换,但仍可用来进行显示类型转换.如: class B { public: explicit B(int x = 0, bool b = ture); }; copy构造函数:用于以同型对象初始化自我对象,以passed by value的方式传递对象:· copy assignm

《Effective C++》第2章 构造/析构/赋值运算(2)-读书笔记

章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(2)-读书笔记 <Effective C++>第8章 定制new和delete-读书笔记 条款09:绝不在构造和析构过程中调用virtual函数 你不该在构造和析构函数期间调用virtual函数,因为这样的调用不会带来你预期的结果. (1)在der

《Effective C++》第2章 构造/析构/赋值运算(1)-读书笔记

章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effective C++>第8章 定制new和delete-读书笔记 条款05:了解C++默默编写并调用哪些函数 当C++处理过一个空类后,编译器就会为其声明(编译器版本的):一个拷贝构造函数.一个拷贝赋值运算符和一个析构函数.如果你没有声明任何构造函数,编译器还会声明一个默认构造函数.所有这些函数都被声明为pub

C++语言(03)——对象的构造

对象的构造(上) 成员变量的初始值 (1)从程序设计的角度来看,对象只是变量,定义对象就是定义变量,所以:在栈上创建对象时,成员变量初始值为随机值在堆上创建对象时,成员变量初始值为随机值在静态数据区上创建对象时,成员变量初始值为0(2)全局变量和static修饰的局部变量存储在静态数据区,没有显式初始化其值为0(bss/ZI段) /** 从程序设计的角度来看,对象只是变量,定义对象就是定义变量,所以: 在栈上创建对象时,成员变量初始值为随机值 在堆上创建对象时,成员变量初始值为随机值 在静态数据

c++继承构造析构调用原则以及特殊变量处理

一.继承中的构造析构调用原则 1.子类对象在创建时会首先调用父类的构造函数 2.父类构造函数执行结束后,执行子类构造函数 3.当父类构造函数有参数时,需要在子类的初始化列表中显示调用: 4.析构函数调用的先后顺序与构造函数相反 二.继承与组合混搭时,构造与析构的调用原则 1.先析构父类,再构造成员变量,最后构造自己 2.先析构自己,在析构成员变量,最后析构父类(先析构的对象,后释放) 三.继承中同名成员变量处理方法 1.当子类成员变量与父类的成员变量同名时,子类依然从父类继承同名成员,且同名成员

第19课 - 对象的构造(下)

第19课 - 对象的构造(下) 1. 特殊的构造函数 (1)无参构造函数 当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空. (2)拷贝构造函数 当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制. 1 #include <stdio.h> 2 3 class Test 4 { 5 private: 6 int i; 7 int j; 8 public: 9 int getI() 10 { 11 return i; 12 } 13