QString 是 Qt 内部的一种字符串数据类型,QString 支持多字节编码(unicode)的一个字符串类。在程序和网络之间传输数据时,其他的程序和网络另一端的程序是不能识别他这种数据类型的。所以要想将 QString 类型的数据保存到文件或发送到网络,需要转换成 QByteArray 类型才可以。
shadow、overload、override
shadow(阴影)、overload(重载)、override(覆写),这三个概念一直有人非常混淆,很幸运,经过老师的悉心教导,我总结了一下三个概念的不同之处。
shadow:发生在父子之间,需要函数名相同即可构成 shadow (阴影),构成 shadow 后可通过域运算符来访问对应类中的函数。
#include <iostream> using namespace std; class A { public: void display() { cout << "A display" << endl; } }; // B 继承了 A class B : public A { public: void display() { cout << "B display" << endl; } }; int main(int argc, char* argv[]) { B b; b.display(); // 域运算符来访问对应类中的函数 b.A::display(); return 0; }
overload:发生在同一作用域内(同一个类中)。同名,参数不同(类型、个数、顺序)无关返回值就会构成 overload (重载)。
#include <iostream> using namespace std; class A { public: void display() { cout << "A display" << endl; } // 构成重载 void display(int i) { cout << "A display int" << endl; } }; int main(int argc, char* argv[]) { A a; a.display(); a.display(10); return 0; }
override:发生在派生类中,实现了父类的虚函数成为 override(覆写),需要函数名、返回值、参数个数及类型都一模一样,函数体可以不同。虚函数在后面会有详细介绍。
#include <iostream> using namespace std; class A { public: virtual void display() { cout << "A display" << endl; } }; class B : public A { public: // 继承了A类, void display() { cout << "B display" << endl; } }; int main(int argc, char* argv[]) { // 多态小例子 A *a = new B; a->display(); return 0; }