ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Qt图形界面编程入门(2)

2021-03-11 19:04:50  阅读:200  来源: 互联网

标签:Account Qt 对象 图形界面 编程 int 引用 myAccount 指针


二,指针和引用

· 共同点:它们都代表其他变量占据的某一块内存区,通过指针或引用都可以对他们代表的其他变量进行操作。

·  以下语句利用指针对变量赋值:

int m;   
int *p;  //指针定义
p = &m;  //将m的内存地址赋给p
*p = 5;  // 通过指针对变量m赋值

· 而下面的语句则是利用引用做同样的事情:

int m;
int &q = m;
q = 5;

·注意上面两段代码,&放在等号右侧的某个变量前一般是取地址

而在定义变量时,在变量前出现的&符合是引用。

·  引用只能在定义时被初始化一次,之后不可变;

而指针可变;例如语句 int &q = m 是正确的,但是下面写法不对:

int &q;
q = m

而且q一旦和m绑定,就不可改变。

而指针不同,指针p可以先指向m,即p = &m;使用完毕后,可以让p指向其他变量,比如再执行p = &k;

·  引用不能为空,指针可以空;

因为引用必须再定义时直接初始化,因此引用就不会为NULL,而指针可以是NULL。

可以用指针或引用代表对象

类对象指针和引用的使用

比如:

Account myAccount;
Account &q1 = myAccount;  //q1为Account类引用

// 可以定义指针p1,让p1指向myAccount,使用下面语句

Account *p1;
p1 = &myAccount;

//类对象指针或引用常常出现在函数的参数表或返回值中

· 利用类对象指针实现转账函数:

bool transfer(Account *pA,Account *pB,float m)
{
    if(pA->withdraw(m) == 1) //若A取款成功
    {
        pB->deposits(m); //向B存款
        return ture;
    }else return false;
}

//调用函数时用下面语句:
transfer(&myAccount,&account[0],1000.0);
//相当于执行下面语句:
pA = &myAccount;
pB = &account[0];
//myAccount和account[0]被修改

·  下面是利用类对象的引用实现转载函数:

bool transfer(Account &A,Account &B,float m)
{
    if(A.withdraw(m) == 1) //若A取款成功
    {
        B.deposits(m); //向B存款
        return true;
    }else return false;
}
//这个函数和第一个版本的差别仅仅在形式参数中,变量A和B是引用类型。调用函数时使用下面语句:
transfer(myAccount,account[0],1000.0);
//相当于执行下面语句:
Account &A = myAccount;
Account &B = account[0];
//myAccount和account[0]被修改

动态创建对象

如果定义了指针后,不想让指针指向某个已经定义好的对象,那么可以使用动态创建对象的方法为指针生成一个对象。这时要使用C++语言的new操作符:

Account *pA;
pA = new Account; //动态创建Account对象

Account *pB;
pB = new Account[10]; //动态创建10个对象

动态创建的对象只能通过指针使用,因为他们没有其他名字。比如下面语句输出公有数据成员:

cout << pA->ID << " " << pA->Name;

当动态创建的对象使用完毕后,C++可以动态的删除前面的动态创建的对象,这需要使用delete此操作:

delete pA; //删除和pA关联的动态对象

注意:只有当没有其他指针(除pA)指向这个动态对象时,delete才能真正删除动态对象

对象自身的指针this

每个对象都有一个指向直接的指针---this指针。

当一个函数中的局部变量和类对象的数据成员变量同名时,一定要使用this指针。

class Account
{
public:
    int ID;
    char Name[20];
    float balance;
    void Initial(int ID,char Name[],float balance);
    .....
};
void Account::Initial(int ID,char Name[],float balance)
{
    this->ID = ID ; //将传入的ID赋给当前对象的ID
    strcpy(this->Name,Name); //将传入的Name赋给当前对象的Name
    this->balance = balance ; //将传入的balance赋给当前对象的balance
}

如果不想使用this,则参数表里的变量一定要换个名字,这时局部变量就不会和类的成员重名,不会有二义性。

 

标签:Account,Qt,对象,图形界面,编程,int,引用,myAccount,指针
来源: https://blog.csdn.net/weixin_45626468/article/details/114676542

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有