指针数据类型变量如何包含对象?
How can a pointer data type variable can contain an object?
我对c ++/QT相当陌生,我很难理解TCP套接字教程(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"的私有属性,它是类声明中的指针类型。
这是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);
在这里,"套接字"应该只包含一个内存地址,不是吗?我们怎样才能对它产生影响?
另外,另一个小问题 ; 为什么我们不使用"this"关键字来初始化类声明中的属性?:
this->socket = new QTcpsocket(this);
如果这些问题看起来有点傻,我很抱歉,但我找不到任何好的解释...... 提前感谢!
operator new
返回指向新分配的内存的指针。
关于this->socket
,它是隐式假设的,我们可以直接使用socket
变量。
谢谢@CinCout和@vahancho!
相关文章:
- QWidget findChildren 当对象名称包含特定字符串时
- C++:如何创建一个临时对象,包含一个指针 - 常量或非常量,具体取决于上下文
- 只有Arduino的第一个对象在包含在另一个对象的集合/数组中时会丢失其数据属性值
- 其他命名空间中的对象没有包含,否则文件相同
- 如何有效地从该对象中包含的另一个对象访问对象字段/属性
- 派生类对象是否包含基类的私有成员?它在记忆中是什么样子的
- 对象必须包含指针成员才能与其他对象通信
- 子对象和包含对象之间的差异
- 如何处理错误“vtkTrivialProducer :此数据对象不包含请求的范围”
- 另一个对象所包含的一个对象如何可以更改容器对象的私有数据成员
- 带有向量的c++不同对象都包含相同的内容
- C++检查类对象是否包含某个元素
- CMake对象库包含main
- 哪个对象文件包含以下静态模板化"member variable"?
- 如何让本地匿名c++函数对象使用包含方法的参数
- 派生类对象是否包含基类对象
- 非托管到托管返回对象,包含BOOL
- 在对象中包含对象的向量,使用引用
- 是否有一种方法可以检查QJsonObject对象是否包含特定的属性
- 在va_list对象中包含第一个参数