我来自Java背景,并开始使用C++中的对象.但是我遇到的一件事是人们经常使用指向对象的指针而不是对象本身,例如这个声明:
Object *myObject = new Object;
Run Code Online (Sandbox Code Playgroud)
而不是:
Object myObject;
Run Code Online (Sandbox Code Playgroud)
或者,不要使用函数,比如说testFunc():
myObject.testFunc();
Run Code Online (Sandbox Code Playgroud)
我们要写:
myObject->testFunc();
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚为什么我们这样做呢.我认为它与效率和速度有关,因为我们可以直接访问内存地址.我对吗?
我正在试图弄清楚如何在另一个班级中听取属性变化.以下是我的代码:
ClassWithProperty具有我想要监听的属性:
public class ClassWithProperty {
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
private int usersOnline;
public int getUsersOnline() {
return usersOnline;
}
public ClassWithProperty() {
usersOnline = 0;
while (usersOnline<10) {
changes.firePropertyChange("usersOnline", usersOnline, usersOnline++);
}
}
public void addPropertyChangeListener(
PropertyChangeListener l) {
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(
PropertyChangeListener l) {
changes.removePropertyChangeListener(l);
}
}
Run Code Online (Sandbox Code Playgroud)
主要是我需要了解房产变化的地方:
public class Main {
private static ClassWithProperty test;
public static void main(String[] args) {
test = new ClassWithProperty();
test.addPropertyChangeListener(listen());
}
private static PropertyChangeListener listen() {
System.out.println(test.getUsersOnline()); …Run Code Online (Sandbox Code Playgroud) 我使用以下代码
List<String> text = new ArrayList<String>();
text.add("Hello");
Run Code Online (Sandbox Code Playgroud)
所以该列表只接受要添加的字符串,如何将更多类型的变量(如整数和字符串)添加到一个列表中
在文本列表中添加一些矩形值,如
矩形名称,矩形宽度,矩形高度
所以后来我可以循环访问它们
所以我最近一直在用C编程并研究Signals和POSIX线程.我知道我可以在一个线程中等待一个信号,但我一直想知道是否有可能有一个包含一个while循环的线程,该循环将在未收到SIGINT时继续执行.所以基本上我不是在等待信号(停止执行while循环),而是继续执行直到收到信号.只是听一定的信号.
我试过谷歌搜索但无济于事.
有什么建议?提前致谢!!
所以我正在尝试从我的应用程序中打印一个窗口,并使用以下代码:
QPrinter *printer = new QPrinter;
printer->setResolution(1200);
QPrintDialog *printDialog = new QPrintDialog(printer, this);
if (printDialog->exec() == QDialog::Accepted) {
QPainter p(printer);
QPixmap pm = QPixmap::grabWidget(this);
p.drawPixmap(0,0,pm);
}
Run Code Online (Sandbox Code Playgroud)
为了测试它我将图像导出为PDF,但我得到的是非常低分辨率的文件.关于如何制作高分辨率可缩放图像的任何想法?因为我打印的图表应该是可读的,因为它上面有一些小的值.
所以我在C++中遇到了一个叫做虚函数的东西,简而言之就是我所理解的用于在派生/子类中启用函数重载的东西.
所以我们有以下课程:
class MyBase{
public:
virtual void saySomething() { /* some code */ }
};
Run Code Online (Sandbox Code Playgroud)
那么当我们创建一个继承MyBase的新类时,如下所示:
class MySubClass : public MyBase{
public:
void saySomething() { /* different code than in MyBase function */ }
};
Run Code Online (Sandbox Code Playgroud)
MySubClass中的函数将执行自己的saySomething()函数.
要理解它,是否与Java相同,只需在派生类中编写相同的函数名称即可实现相同的功能,这将自动覆盖/重载它?
在C++中实现的目标是什么,你需要额外的步骤,即将基类中的函数声明为虚拟?
先感谢您!:)
所以我刚读了一篇关于sizeof()C++书的章节.我读到的是,如果操作数是一个类型,你只需要sizeof之后的括号,你可以在有表达式时跳过括号,所以我做了自己的测试,看看这是怎么回事.我使用下面的代码来看看我会得到什么:
int main(){
cout << sizeof 5 + 5<< endl;
cout << sizeof 10 - 5<< endl;
cout << sizeof 5 * 5<< endl;
cout << sizeof 4.5 + 5.5<< endl;
cout << sizeof 10.5 - 5.5<< endl;
cout << sizeof 2.5 * 5<< endl;
cout << sizeof 10.0 / 5.0<< endl;
cout << endl;
cout << sizeof 5 << endl;
cout << sizeof 5.0 + 5.0 << endl;
cout << sizeof 5.5 << endl;
return 0;
} …Run Code Online (Sandbox Code Playgroud) 所以我目前正在学习 C 语言中的 POSIX 线程和信号编程。我的讲师使用
sigset(int sigNumber, void* signalHandlerFUnction)
Run Code Online (Sandbox Code Playgroud)
因为他的笔记不是世界上最好的,我不得不自己做一些研究,发现了一篇解释信号的好文章,但作者正在使用 signal()方法,该方法接受相同类型的参数,即 sigNumber和一个指向信号处理函数的指针。
从我可以看到的两种方法都接受相同的参数并基本上产生相同的结果。我读到 signal() 很旧而且不可移植,所以sigaction()更好。但实际的区别是什么?