gpt4 book ai didi

c++ - 指针数据类型变量如何包含对象?

转载 作者:行者123 更新时间:2023-12-02 10:07:54 25 4
gpt4 key购买 nike

我对 c++/QT 还很陌生,我很难理解 TCP Socket 教程 (https://www.bogotobogo.com/Qt/Qt5_QTcpSocket_Signals_Slots.php) 中的一堆代码。

这是 mytcpsocket.h 文件(类声明):

#ifndef MYTCPSOCKET_H
#define MYTCPSOCKET_H

#include <QObject>
#include <QTcpSocket>
#include <QAbstractSocket>
#include <QDebug>

class MyTcpSocket : public QObject
{
Q_OBJECT
public:
explicit MyTcpSocket(QObject *parent = 0);

void doConnect();

signals:

public slots:
void connected();
void disconnected();
void bytesWritten(qint64 bytes);
void readyRead();

private:
QTcpSocket *socket;

};

#endif // MYTCPSOCKET_H

因此,在类声明中有一个名为“socket”的私有(private)属性,它是指针类型。

这是 mytcpsocket.cpp 文件(类定义):
// mytcpsocket.cpp

#include "mytcpsocket.h"

MyTcpSocket::MyTcpSocket(QObject *parent) :
QObject(parent)
{
}

void MyTcpSocket::doConnect()
{
socket = new QTcpSocket(this);

connect(socket, SIGNAL(connected()),this, SLOT(connected()));
connect(socket, SIGNAL(disconnected()),this, SLOT(disconnected()));
connect(socket, SIGNAL(bytesWritten(qint64)),this, SLOT(bytesWritten(qint64)));
connect(socket, SIGNAL(readyRead()),this, SLOT(readyRead()));

qDebug() << "connecting...";

// this is not blocking call
socket->connectToHost("google.com", 80);

// we need to wait...
if(!socket->waitForConnected(5000))
{
qDebug() << "Error: " << socket->errorString();
}
}


您可以在 doConnect() 方法中看到,它使用 QTcpSocket 类中的对象初始化“socket”属性(它是一个指针,对吗?)。

这怎么可能 ?
我的意思是,从我所学到的;
int number{10};
int *ptr_number = &number
ptr_number // variable that store number's memory address.
*ptr_number = number // deferencing ptr_pointer.

所以应该是:
*socket = new QTcpsocket(this);

代替 :
socket = new QTcpsocket(this); 

在这里,“socket”应该只包含一个内存地址,不是吗?我们怎样才能影响到它呢?

另外,另一个小问题;
为什么我们不使用“this”关键字来初始化类声明中的属性? :
this->socket = new QTcpsocket(this);

如果这些问题看起来有点傻,我深表歉意,但我找不到任何好的解释......
提前致谢!

最佳答案

operator new返回一个指向新分配的内存的指针。

关于this->socket ,这是隐含的假设,我们可以直接使用 socket多变的。

谢谢@CinCout 和@vahancho!

关于c++ - 指针数据类型变量如何包含对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59264948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com