本人刚开始学习QT,有一些C语言基础,了解一点点C++,以下是一个QT例子,其中有很多语言不懂,望高人指点~

本人刚开始学习QT,有一些C语言基础,了解一点点C++,以下是一个QT例子,其中有很多语言不懂,望高人指点~,第1张

Ticker(QWidget *parent = 0)//为什么在括号内要有(QWidget *parent = 0)?

这是构造函数的参数。C++可以使用默认参数。其实写成iQWidget *parent = NULL就是没有父窗口,就更容易理解了。

void paintEvent(QPaintEvent *event)//(QPaintEvent *event)又是什么意思?定义了event一个指针?如果说定义一个event指针那为什么下面三句又定义了event指针?

你这么问,应该是基础不好,C/C++的参数名是任意的,只要符合语法要求就可以,因此是可以相同的,这个只是函数的参数,而不是定义变量。三个event指针,是三个不同类型的事件指针,是三个函数的参数,不是定义变量。

Ticker::Ticker(QWidget *parent) : QWidget(parent)//前一个ticker指的是类,第二个ticker是成员函数还是?,那后面的两个括号内指的是什么?

第二个是构造函数,Ticker(QWidget *parent)是构造函数,QWidget *parent是构造函数的参数;

: QWidget(parent)是初始化列表的格式,你可以搜索一下 初始化列表 来查一下更具体的内容。

void Ticker::showEvent(QShowEvent * /* event */)//定义类和成员函数?括号内又是干什么的?是否可以将QShowEvent *换成QShowEvent * event ?

可以,函数定义的时候,是可以写参数,也可以不写,只简写参数的类型。

QWidget::timerEvent(event)//调用类和成员函数?括号内event怎么又没有*号了?

感觉你的基础真的不好,函数定义的时候,参数是要写类型的,所以那个*是表示指针类型。

而函数调用的时候,参数是指针类型的,就可以直接使用啊。如果不是指针,就用取地址符号(&)转成地址(指针就是地址)。

void paintEvent(QPaintEvent *event)//这样是定义,其实这么写更好一些

void paintEvent( QPaintEvent * event)//这个函数的参数是event,event的类型是QPaintEvent * 。感觉你的理解是这个函数的参数时 * event,而参数类型是QPaintEvent ,那样就错了。不知道你明白没有。

给你一些建议,因为你的基础看起来不是很好,建议看看谭浩强的《C++程序设计》等你完全理解这些问题了,再看看钱能的《C++程序设计》。再看国外的经典书。基础很重要,很重要。

#include <stdio.h>

#include <string.h>

char * copy(char *a, int m, int n)

{

static char tmp[255]

strncpy(tmp, a+m, n)

return tmp

}

int main()

{

char a[255]

int m, n

printf("输入字符伏迅串:\n")

gets(a)

printf("输入m n:\n")

scanf("%d %d", &m, &n)

puts(copy(a, m, n))

return 0

}

#include<stdio.h>

#include<string.h>

#define N 20

main()

{

int dx=0,xx=0,sz=0,qt=0

char a[N]=""

char *p

gets(a)

puts(a)

p=a

while(*p!='\0')

{

if(*p>='a'&&*p<='z'手隐)

xx++

else if(*p>='A'&&*p<='Z')

dx++

else if(*p>='0'&&*p<='9')

sz++

else

qt++

p++//这里

}

printf("大写字母:%d,\n小写字母缺薯此:%d,\n数字:%d,\n其他:%d\n",dx,xx,sz,qt)

}

这个问题很好玩,其实就是找到三角形从顶层到底层经过的数字之和为最大的路径,输出这个和值。

这个问返巧题解决途径就是依次计算三角形上每个节点从顶层开始到本节点经过的数字之和的最大值(简称为该节点的权重值),最后从最底层的节点中返回权重值最大的节点的权重即可。应当注意到,考虑到算法的时间复杂性,每个节点的权重值可以分别通过其父节点(0个到2个,从三角形结构上看上一层节点为下一层节点的父节点)的权重值加上本节点数字隐岩来计算,并获得其中的最大值。其灶世御时间复杂性为O(n^2)。

设计程序时可以构造一个表结构,链表或者数组都可以,只要能从每个节点访问到其父节点就可以了。下面的C程序是以数组表结构的方式来实现,已经过调试,仅做参考。

#include <stdio.h>

typedef struct {

int val// 本节点数字

int sum// 本节点劝重值

int lparent// 左父节点索引

int rparent// 右父节点索引

}NODE

// 输入三角形,并计算每个节点的父节点索引

int input_triangle(NODE *p, int nrow)

// 计算每个节点的父节点索引

int pindex(int index, int min, int max)

// 计算权重,并返回最大的权重值

int calc_max(NODE *p, int nrow)

void main()

{

int ntriangle// 多少个三角形

int nrow // 每个三角形多少行

NODE *tnode = NULL// 数组头指针

scanf("%d", &ntriangle)

while(ntriangle >0)

{

scanf("%d", &nrow)

if (nrow >0)

{

if (tnode != NULL)

{

free((char *)tnode)

}

tnode = (NODE *)calloc((nrow + 1) * nrow / 2, sizeof(NODE))

if (input_triangle(tnode, nrow) == 1)

{

printf("%d\n", calc_max(tnode, nrow))

}

}

ntriangle--

}

if (tnode != NULL)

{

free((char *)tnode)

tnode = NULL

}

}

int input_triangle(NODE *p, int nrow)

{

int i

int j

int k

int n

int val

k = 0

for(i = 0i <nrowi++)

{

for(j = 0j <i + 1j++, k++, p++)

{

scanf("%d", &val)

if ((val <0) || (val >99))

{

fprintf(stderr, "Error: bad number '%d'(valid:0~99)\n", val)

return 0

}

p->val = val

p->sum = 0

if (i >0)

{

n = (i - 1) * i / 2

p->lparent = pindex(k - i - 1, n, n + i - 1)

p->rparent = pindex(k - i, n, n + i - 1)

}

else

{

p->lparent = -1

p->rparent = -1

}

}

}

return 1

}

int pindex(int index, int min, int max)

{

return ((index <min || index >max) ? (-1) : index)

}

int calc_max(NODE *p, int nrow)

{

int i

int j

int k

int n

p[0].sum = p[0].val

j = (nrow + 1) * nrow / 2

for(i = 1i <ji++)

{

if (p[i].lparent >= 0)

{

k = p[i].lparent

n = p[i].val + p[k].sum

if (n >p[i].sum)

{

p[i].sum = n

}

}

if (p[i].rparent >= 0)

{

k = p[i].rparent

n = p[i].val + p[k].sum

if (n >p[i].sum)

{

p[i].sum = n

}

}

}

n = p[j-NROW].sum

for(i = j - NROW + 1i <ji++)

{

if (n <p[i].sum)

{

n = p[i].sum

}

}

return n

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12351792.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存