《C++ Qt设计模式》 第一章 C++ 简介

本文介绍了C++的基础知识及Qt框架的应用,包括编译工具qmake的使用、字符串处理方式、流操作、文件读写等核心内容。此外,还探讨了C++对象的大小、main函数参数、const关键字的使用、指针与内存访问等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

第1 章 C++简介

内容:

 

编译相关

 

    Qt提供了一个qmake工具,它会产生Makefile 文件。使用qmake -project 命令产生一个简单的工程文件。当执行这个命令时,qmake 会将当前工作目录下的全部源文件作为SOURCES列出来,而将全部头文件作为HEADERS 列出来

    使用make 重新编译那些发生了变化的文件,或者那些由于任何变化而受到影响的文件,而不会盲目编译每一个源文件。

    如果要在工程中添加更多的源代码文件、头文件或者库模块,则必须编辑.pro 文件,将新项目添加到相应的sources,headers 或者 libs 列表中。

1.8 字符串

  1.const char * C语言风格的字符串,主要用于与C 语言库的接口。

  2.来自于C++ 标准库的string ,任何地方都可以使用这种类型。

  3.Qstring ,有丰富的API 而且更容易使用。它的实现支持延时写时复制(lazy copy-on-write)和隐式共享(implicit sharing),不必每一次都为字符串分配内存并进行复制。此外,Qstring 还内置支持Unicode 标准,以方便程序的国际化。

1.9 流

  标准库中定义了 iostream ,Qt中定义了 QTextStream 。

  iostream 中定义了三种全局流:cin    cout    cerr ,iostream 中还定义了操作算子,比如flush 和 endl 。操作算子被函数隐式调用,这些函数能够以各种方式改变流的状态。

实例:

  

用于:进制转换,输出形式,bool形式,小数点位数,是否带上加号。

与iostream 相对应的是QTextStream,还有一个全局函数QDebug(),用它可以方便地将消息发送到控制台(不管控制台是什么),具有灵活的接口。

实例:

  

1.10 文件流

  流被用来读取、写入文件,连接网络和处理字符串

   Qt中使用 QString 和 QFile ,前者具备功能强大而灵活的字符串表示能力,后者提供处理文件的接口。

#include <QString>
#include <QTextStream>
#include <QDebug>
#include <QFile>

QTextStream cout(stdout);

int main()
{
    QString ss("tangyuanjie");
    cout<<ss<<endl;
    qDebug()<<"here is a debug message!!"<<endl;

    //文件操作
    //写入文件
    QFile data("mydata");//创建文件
    data.open(QIODevice::WriteOnly);//打开文件
    QTextStream out(&data); //创建流,指向文件
    out<<ss<<endl;
    out<<"another line of string.";
    data.close();//关闭文件

    //读取文件
    cout<<"read data from the file."<<endl;
    if(data.open(QIODevice::ReadOnly))//读取之前确保文件存在
    {
    QTextStream in(&data);
    QString newstr;
    while(! in.atEnd())
    {
        newstr = in.readLine();//一行一行的读取
        cout<<newstr<<endl;
    }
    data.close();//关闭文件
    }

    return 0;
}

C++ 对象的大小

#include <QString>
#include <QTextStream>
#include <QDebug>
#include <QFile>
#include <QDate>
#include <QChar>

QTextStream cout(stdout);

int main()
{
   cout<<"sizeof(char):"<<sizeof(char)<<endl;
   cout<<"sizeof(int):"<<sizeof(int)<<endl;
   cout<<"sizeof(short):"<<sizeof(short)<<endl;
   cout<<"sizeof(double):"<<sizeof(double)<<endl;
   cout<<"sizeof(int*):"<<sizeof(int*)<<endl;
   cout<<"sizeof(long):"<<sizeof(long)<<endl;
   cout<<"sizeof(Qstring):"<<sizeof(QString)<<endl;
   cout<<"sizeof(qint32):"<<sizeof(qint32)<<endl;
   cout<<"sizeof(qint64):"<<sizeof(qint64)<<endl;
   cout<<"sizeof(QDate):"<<sizeof(QDate)<<endl;
   cout<<"sizeof(qchar):"<<sizeof(QChar)<<endl;

    return 0;
}

结果:

QString(或者实例str) 只有4个字节,但是它是一个动态内存的复杂类,需要调用length()来获得字符串中char 的数量。

 

1.13.1 main 与命令行参数

  int main(int argc, char* argv[])

  int main(int argcount, char** argValues)

  int main(int argc, char* const argv[])

  这些形式都是有效的,它们都定义了两个参数:int 型参数包含了命令行参数的个数,而C 风格的字符串数组包含了实际的参数。这些参数从父进程传递给程序,包含了用于重构命令行参数所需的足够信息。

 

1.14 const 关键字

  一般而言,将常量孤立出来,可以提高程序的可维护性。

例如:

const int SIZE = 322;
...
for(i = 0; i < SIZE; i++)
{
...
}

在某些C或者C++程序中,可能会看到将常量定义成预处理器宏的情况,例如

#define STRSIZE 80

...

char str[STRSIZE];

在编译器看到预处理器宏之前,它将被替换。而const表达式可以进行类型检查。

 

1.15 指针与内存访问

  & 称为取地址运算符

  int* 称为指针

指针占用内存大小为sizeof(int) 大小,

  *x,* 被称为解引用运算符;

 

 1.15.2

  new 运算符从堆(heap,也称为动态内存)中分配内存空间,并且返回新分配对象的指针。

  delete 运算符的作用是释放动态分配的内存并将其返回给堆。delete 操作只能用于由new 运算符返回的指针或者空指针。

 

1.16 引用变量 

  在C++中,引用(reference)提供了一种给左值赋予一个别名的机制,避免不必要的复制,例如向函数传送一个非常大的对象作为参数。引用必须在声明时进行初始化。

  int n;

  int& rn = n;

 

1.17 const* 和 *const

  const char* x = &p 不可改变对象的值;

  char* const y =&p 指针不能指向其他对象;

  

 

转载于:https://www.cnblogs.com/tangyuanjie/p/6682832.html

C++ Qt设计模式(第2版)是美国萨福克大学已使用十余年的经典教程,利用跨平台开源软件开发框架Qt阐释了C++设计模式中的主要思想。全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分的延伸和拓展;第三部分使用Phonon编写了一个多媒体播放器,展示了主要技术理念的应用方法;附录部分给出了C++保留关键字、Debian和Qt程序开发环境的配置等内容。每节的练习题和各章后面的复习题,既可作为课堂上的讨论题,也可进一步启发读者对于关键知识点的思考。 C++ Qt设计模式(第2版)目录 第一部分 设计模式Qt 第1章 C++简介 2 第2章 类与对象 46 第3章 Qt简介 78 第4章 列表 85 第5章 函数 94 第6章 继承与多态 116 第7章 库与设计模式 163 第8章 QObject, QApplication,信号和槽 179 第9章 窗件和设计师 195 第10章 主窗口和动作 225 第11章 范型和容器 246 第12章 元对象,属性和反射编程 262 第13章 模型和视图 277 第14章 验证和正则表达式 302 第15章 XML解析 318 第16章 更多的设计模式 335 第17章 并发 353 第18章 数据库编程 376 第二部分 C++语言规范 第19章 类型与表达式 386 第20章 作用域与存储类 416 第21章 内存访问 431 第22章 继承详解 443 第三部分 编 程 作 业 第23章 MP3自动点唱机作业 456
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值