1 外部访问就是 实例类后 访问类中变量
class MyClass {
public:
int publicVar; // 公有变量
protected:
int protectedVar; // 受保护变量
private:
int privateVar; // 私有变量
};
MyClass obj;
obj.publicVar = 1; // 正确: 公有变量可以在类外部直接访问
obj.protectedVar = 2; // 错误: 受保护变量不能在类外部直接访问
obj.privateVar = 3; // 错误: 私有变量不能在类外部直接访问
2 基类protected成员是子类的内部成员
class Base {
private:
int privateVar; // Base类私有成员
protected:
int protectedVar; // Base类受保护成员
};
class Derived : public Base {
public:
void AccessMembers() {
// privateVar = 1; // 错误: Derived类不能访问Base类的私有成员
protectedVar = 2; // 正确: Derived类可以访问Base类的受保护成员
}
};
int main() {
Derived obj;
// obj.privateVar = 1; // 错误: 不能在类外部访问私有成员
// obj.protectedVar = 2; // 错误: 不能在类外部访问受保护成员
}
3 创建指针 指向对象用 -> ; 实例化对象用 .
3.1 用 -> 的堆 ( -> 不能用在栈上)
ThrLevel1* thrLevel1 = new ThrLevel1(this, ok); // 创建 指针型用 ->
connect(thrLevel1, &ThrLevel1::signal, this, &qt_ok::signalThrLevel1);
// 启动线程
thrLevel1->setInstId("BTC-USDT");
thrLevel1->start();
3.2 用 . 的栈
ThrLevel1 thrLevel1(this, ok);
thrLevel1.setInstId("BTC-USDT"); // 使用点操作符访问对象的成员函数
thrLevel1.start();
4 名称遮蔽 加类型名称 声明变量 是局部变量 把类全局变量搞成了 变量所在的局部变量
class MyClass {
public:
MyClass() {
MyType* myVar = new MyType(); // 这里创建了一个局部变量 myVar
// ...
}
~MyClass() {
delete myVar; // 这里尝试删除的是成员变量 myVar,但它实际上从未被赋值
}
private:
MyType* myVar; // 这是类的成员变量
};