C++基础语法/C++语言新特性
C++基础(一)
静态数据成员
不同对象同一空间,静态成员变量(
static
修饰)不属于任何对象,而是直接存储在程序的静态存储区(全局数据区)
class A{
static int z;
public:
void Setxy(int a,int b);
}
A a1,a2;
使用注意:
1.编译时就为类是数据成员分配静态存储区空间
2.在文件作用域中作一次且仅能一次定义性说明
int MyClass::staticMember = 0;//需要声明静态成员变量
3.public权限时,才可能在类外进行访问
4.一般在静态数据成员定义行说明时指定初值
静态成员函数
在多线程或跨模块场景中安全地共享计数:
1.类外定义不加static
2.不能定义为virtual
3.将静态成员函数定义为内联 inline
4.静态函数无法直接访问非静态成员(如 statusLabel),需通过实例传递
普通成员函数(非静态成员函数)和静态成员函数访问区别:
class MyWindow : public QMainWindow {Q_OBJECTpublic:// 静态成员变量:全局登录状态(所有窗口实例共享)static bool isLoggedIn; // 构造函数explicit MyWindow(QWidget *parent = nullptr);// 普通成员函数:通过实例修改静态变量(需对象调用)void updateLoginStatusInstance(bool status);// 静态成员函数:直接修改静态变量(类名调用)static void updateLoginStatusStatic(bool status);
// 普通成员函数:通过实例修改静态变量
void MyWindow::updateLoginStatusInstance(bool status) {isLoggedIn = status; // 直接修改静态变量(需注意:所有实例共享,可能被其他实例覆盖)statusLabel->setText(QString("登录状态:%1(通过实例修改)").arg(status ? "已登录" : "未登录"));qDebug() << "普通函数修改后,静态变量值:" << isLoggedIn;
}// 静态成员函数:直接修改静态变量
void MyWindow::updateLoginStatusStatic(bool status) {isLoggedIn = status; // 直接修改静态变量(类级别操作)// 注意:静态函数无法直接访问非静态成员(如 statusLabel),需通过实例传递qDebug() << "静态函数修改后,静态变量值:" << isLoggedIn;
}
构造函数
1.编译器显示定义了一个类的构造函数,编译器就不产生缺省构造函数
2.不存在没有构造函数的对象
3.缺省构造函数只有一个
4.定义的类要说明对象,构造函数必须是公有成员函数;定义的类仅用于派生,则可将构造函数定义为保护构造函数。
5.对于全局对象是在main之前调用
析构函数
1.释放对象成员数据成员用new运算符分配的动态对象时,必须显示定义析构函数,并delete。
2.没有,编译器会自定义一个
拷贝构造函数
1.如果没有定义拷贝构造函数,编译器会自定义一个