1.定义类 一般写在.h文件中
#include<string> #include<iostream> using namespace std; void print(char content[]); void TestString1(); void TestString2(); void TestString3(); class Person { private: int age; public: string name; Person(string name); ~Person(); void printName(); }; Person::Person(string name) { this->name = name; } Person::~Person() { cout << "~Person()" <<endl; age=0; name = nullptr; } void Person::printName() { cout << name <<endl; }
2.使用
不通过“new”关键字,在栈上创建
通过关键字“new”,在堆上创建
两种方式的区别
在栈中的对象,其作用范围只是在函数内部,函数执行完成后就会调用析构函数,删除该对象。使用 “.” 而不是 “->” 调用对象的方法。
在堆中的对象,必须要程序员手动的去管理该对象的内存空间 。用运算符“->”调用对象的方法。new出来的对象必须用指针指明地址。
#include<string> using namespace std; #include"test.h" int main(){ Person person("wang"); //在栈中创建对象 Person pp = Person("aa"); //在栈中创建对象 //Person *ppp; //只是声明对象 没有分配空间 Person *p = new Person("aaa"); //在堆中创建对象 p->printName(); person.printName(); TestString3(); string name ="abc"; string name1("abc"); string name2(10,'a'); string name3(name1); //用name1构造name3 string name4(name1,2);//用name1的前两个字符构造name4 delete p; //用完及时删除空间 return 0; }
静态对象
(1)全局静态对象在程序执行 main() 之前已经分配好存储空间 ,在 main() 执行完成后进行释放。
(2)局部静态对象是从其所在函数第一次被调用时进行创建,直到整个程序结束才进行销毁;局部静态对象只有在第一次调用时进行初始化操作。