• 关于类定义与IO操作


    c++和c#的差别还是很大的,开始做一些练习,希望能借此多翻翻C++Primer,养成面向对象编程的习惯,熟悉类的定义,熟悉vim的基本操作和gcc的基本指令。

    1

    类定义写在XXX.h文件中,并且需要在首尾加上

    #ifndef CLASS_XXX_H
    #define CLASS_XXX_H
    class XXX
    {
    ...
    };
    #endif

    否则很容易造成类重复定义。

    类的成员函数的实现则写在XXX.cpp中,它和包含主函数的cpp文件一样,都需要#include头文件,这时#ifndef的用处就体现出来。

    2

    #include标准库函数最好不写.h,然后使用using namespace std;否则,比如如果写#include "string.h",再写using namespace std;可能会有冲突。。

    3

    编译多个文件的方法是g++ a.cpp b.cpp -o prog 输出可执行文件

    编译单个文件的方法是g++ -c a.cpp 输出a.o目标文件。

    然后 g++ a.o b.o之类的

    4

    ifstream的对象读取文件内容时,会一个单词一个单词的读取,需要使用getline函数,才能保留原来的换行格式。

    ifstream显示文件内容
    int open()
    {
        cout<<"open:"<<endl;
        string fileName;
        ifstream file;
        cin>>fileName;
        cout<<endl;
        file.open(fileName.c_str());//以c的方式处理字符串
        if(file)
        {
            string line;
            while(getline(file, line))
            {
                cout<<line<<endl;
            }
            file.close();
            file.clear();
            return 0;
        }
        return -1;
    }

    5

    字符串流到文件流

    save
    int save(Teacher &t)
    {
        string fileName;
        ofstream file;
        cin>>fileName;
        //设置文件模式,写入,转到文件末尾,不清除原文
        file.open(fileName.c_str(), ofstream::out | ofstream::app);
        if(file)
        {
            stringstream strm;
            ....
            return 0;
        }    

    6

    定义一个类时,如果含有另一个类的对象,作为数据成员,则构造函数需要用初始化列表进行传参,从而初始化该对象成员,或者成员对象具有无参的构造函数。

    这时需要在类定义之前,先声明成员对象所对应的类,即

    类定义
    //Student.h
    ...
    #include "Teacher.h"
    
    class Teacher;//不能写成extern class Teacher;
    class Student
    {
        ...
        Teacher classTeacher;
        ...
        Student(....);     
    };
    
    //Student.cpp
    #include "Student.h"
    class Teacher;
    Student::Student(... ,Teacher &mClassTeacher, ...):classTeacher(mClassTeacher)
    {...}
  • 相关阅读:
    嵌入式为什么要用Linux操作系统
    SPI 协议的理解
    跳转某指定地址、给某绝对地址赋值
    define 宏定义
    笔试--编程题
    spring 技巧集锦
    spring data jpa auditing
    spring security
    Python基础笔记
    调试EF源代码环境配置
  • 原文地址:https://www.cnblogs.com/cybersword/p/2756249.html
Copyright © 2020-2023  润新知