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

摘要:
第1章C++简介:编译相关的Qt提供了一个qmake工具,它将生成Makefile文件。使用qmakeproject命令生成一个简单的项目文件。此外,Qstring还支持Unicode标准,以便于程序国际化。运算符由可以以各种方式更改流状态的函数隐式调用。常量表达式可以执行类型检查。delete运算符用于释放动态分配的内存并将其返回到堆。

第1 章 C++简介

内容:

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

编译相关

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

    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 。操作算子被函数隐式调用,这些函数能够以各种方式改变流的状态。

实例:

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

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

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

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

实例:

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

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;
}

结果:

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

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 指针不能指向其他对象;

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

免责声明:文章转载自《《C++ Qt设计模式》 第一章 C++ 简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ubuntu 12.04安装grub2过程中出错怎么办【转】Cycle-GAN论文阅读笔记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用Windbg解析dump文件

WinDbg OllyDbg SoftICE (已经停止更新) 虽说WinDbg在无源码调试方面确实比较困难,但在调试内核方面却真的有独到之处。 https://www.pediy.com/kssd/pediy10/94457.html 使用Windbg解析dump文件 1 常用的Windbg指令 ①!analyze -v ②kP...

Yacc 与 Lex 快速入门

源地址: http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.html Lex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler。 让我们从 Lex 开始吧。 Lex Lex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模...

oracle语句,时分秒格式转成秒

select (hours+minutes+seconds) AS total_seconds from( selectto_char(sysdate,('HH24'))*60*60 AShours, to_char(sysdate,('mi'))*60 ASminutes, to_char(sysdate,'ss') ASseconds fromA );...

ubuntu16.4下使用QT修改系统时间

我也是在网上找的,自己随便改了一下六个lineEdit控件,每个控件输入日期时间,点击按钮触发函数可修改时间。 1 //一键修改系统时间 2 QString year = ui->lineEdit_9->text(); //年 3 QString month = ui->lineEdit_10->tex...

sqlserver日期函数 dateadd,datediff ,datepart ,datename,convert

reference:http://www.cnblogs.com/coconut_zhang/archive/2009/02/02/1382598.html http://blog.itpub.net/14766526/viewspace-1156100/ select GETDATE() as '当前日期',DateName(year,GetDate()...

C99标准

1. 增加restrict指针    C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。    如果某个函数定义了两个restric...