使用static修饰的成员;
静态的成员变量;
静态的成员函数;
#include
#include
using namespace std;
//
class People {
public:
int age; // 实例成员变量,每个对象均有一个副本
string name; // 实例成员变量
static int objNum; // 静态成员变量, 仅有一个副本,所有的对象共享
People() {
this->objNum++;
}
// 重载构造方法 参数列表不同
People(const int& age, const string& name):age(age), name(name) { // 参数列表初始化
this->objNum++;
}
static int& getObjNum() { // 类内定义为内联函数
return objNum; // 静态方法 只能访问静态的成员,且无this指针
}
};
// 类外(全局)初始化 静态变量
int People::objNum = 0;
int main() {
People p(20, "jack");
People p1;
cout << p.getObjNum() << endl;
return 0;
}
#include
#include
using namespace std;
//
class People {
public:
int age; // 实例成员变量,每个对象均有一个副本
string name; // 实例成员变量
People() {}
People(const int& age, const string& name):age(age),name(name) {}
virtual ~People() {}
// 重载+运算符,本质是函数
const People& operator+(const People& p) {
People p1;
p1.age = this->age + p.age;
return p1;
}
//
};
int main() {
People p1(20, "jack"), p2(12, "lili");
People p3;
p3 = p1 + p2; // 重载运算符调用
cout << p3.age << endl;
return 0;
}
其他可重载的运算符:
不可重载运算符:
#include
#include
using namespace std;
class People {
public:
int age; // 实例 成员变量
string name;
People() {
cout << "走无参构造函数..." << endl;
this->age = 30;
}
People(const string& name, const int& age) {
cout << "走有参构造函数..." << endl;
this->name = name;
this->age = age;
}
virtual ~People() {
cout << "删除对象" << endl;
}
// 重载 函数调用()运算符
void operator()(int age) {
cout << "param age:" << age << endl;
cout << "成员age:" << this->age << endl;
}
};
int main() {
People(); // 实例化,走无参构造
string name = "jack";
People("jack", 20); // 实例化,走有参构造
// 声明式 对象 自动释放内存
People p = People("tom", 18); // 同 python 类的实例化,这里还会执行拷贝构造函数
// 对象可调用
p(30);
return 0;
}