Windows编程技术博客一

这个博客主要讨论explicit关键字和enum关键字的用法。

explicit关键字主要存在以下几个问题要去讨论:

(1)explicit关键字的用法和语法用途。

(2)为什么C++语言中要有explicit关键字,即它在编程应用中的意义。

(3)为什么java语言可以没有这个关键字。

关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。

C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造器 2 是个默认且隐含的类型转换操作符。所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器,创建一个AAA的对象。explicit构造函数是用来防止隐式转换的。

(2)除了基本数据类型的类型转换,用户还可以为类类型定义类型转换。一个对象的的类型转换,需要通过创建一个无名的临时对象来完成。简单来讲,就是形式像“类型说明符(表达式)”的显式类型转换符号,就好比类型转换——将某一数据类型转换成为类类型对象的显示类型转换。

(3)自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以Java语言在设计时,没有为该操作设计语法,而是由JVM自动完成。

enum关键字的用法的话用写示例代码运行来实现:

#include

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

{

   QApplication a(argc, argv);

    //在代码中可以使用中文字符串

   QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

    //新建QWidget类对象,默认parent参数是0,所以它是个窗口

   QWidget *widget = new QWidget();

    //设置窗口标题

   widget->setWindowTitle(QObject::tr("我是widget"));

    //新建QLabel对象,默认parent参数是0,所以它是个窗口

   QLabel *label = new QLabel();

   label->setWindowTitle(QObject::tr("我是label"));

    //设置要显示的信息

   label->setText(QObject::tr("label:我是个窗口"));

    //改变部件大小,以便能显示出完整的内容

   label->resize(180, 20);

    //label2指定了父窗口为widget,所以不是窗口

   QLabel *label2 = new QLabel(widget);

   label2->setText(QObject::tr("label2:我不是独立窗口,只是widget的子部件"));

   label2->resize(250, 20);

    //在屏幕上显示出来

   label->show();

   widget->show();

   int ret = a.exec();

   delete label;

   delete widget;

   return ret;

}

QWidget *widget = new QWidget(0,Qt::Dialog);

QLabel *lable = newQLabel(0,Qt::SplashScreen);


你可能感兴趣的:(qt入门)