希望暴露public
希望隐藏private
对象实例化有两种方式,从栈实例化,从堆(new出来的)实例化。
以谁做什么作为核心。
public 放前面,private放后面(属性可以定义为private格式)。
只读属性,只有get方法,没有set方法。
#include <iostream> #include <string> using namespace std; /** * 定义类:Student * 数据成员:m_strName * 数据成员的封装函数:setName()、getName() */ class Student { public: // 定义数据成员封装函数setName() void setName(string name) { m_strName = name; } // 定义数据成员封装函数getName() string getName() { return m_strName; } //定义Student类私有数据成员m_strName private: string m_strName; }; int main() { // 使用new关键字,实例化对象 Student *str = new Student; // 设置对象的数据成员 str->setName("cpp"); // 使用cout打印对象str的数据成员 cout << str->getName() << endl; // 将对象str的内存释放,并将其置空 delete str; str = NULL; return 0; }
栈区,存储变量。
new分配的内存,是堆区。
全局区,存储全局变量和静态变量。
常量区,存储常量。
代码区,存储代码。
对象需要初始化,有的只有一次,有的需要初始化多次。
构造函数,会在对象实例化时被调用。
读书,视频,先看思想,读其骨架。细节次之。
都有默认值的构造函数,称为默认构造函数。
一个类可以没有默认构造函数,有别的构造函数也可以实例化对象。
可以全屏观看,看到关键点可以暂停,记录一下。因为屏幕太小,看着眼疼。或者全屏观看的时候,把文本置顶。
C++中,构造函数与类名相同,析构函数前面加一个波浪线。析构函数,可以进行资源释放。
tips:class 声明类,要小写的c。构造函数,析构函数前面,不需要任何修饰。class结尾还需要分号;
#include <iostream> #include <string> using namespace std; /** * 定义类:Student * 数据成员:m_strName * 无参构造函数:Student() * 有参构造函数:Student(string _name) * 拷贝构造函数:Student(const Student& stu) * 析构函数:~Student() * 数据成员函数:setName(string _name)、getName() */ class Student { public: Student() { m_strName = "jack"; cout<<"Student()"<<endl; } Student(string _name) { m_strName = _name; cout<<"Student(string _name)"<<endl; } Student(const Student& stu) { cout<<"Student(const Student& stu)"<<endl; } ~Student() { cout<<"~Student()"<<endl; } void setName(string _name) { m_strName = _name; } string getName() { return m_strName; } private: string m_strName; }; int main(void) { // 通过new方式实例化对象*stu Student *stu = new Student("小李"); // 更改对象的数据成员为“慕课网” stu->setName("慕课网"); // 打印对象的数据成员 cout<<stu->getName()<<endl; delete stu; stu = NULL; return 0; }
#include <iostream> #include <string> using namespace std; /** * 定义类:Student * 数据成员:m_strName * 无参构造函数:Student() * 有参构造函数:Student(string _name) * 拷贝构造函数:Student(const Student& stu) * 析构函数:~Student() * 数据成员函数:setName(string _name)、getName() */ class Student { public: Student() { m_strName = "jack"; cout<<"Student()"<<endl; } Student(string _name) { m_strName = _name; cout<<"Student(string _name)"<<endl; } Student(const Student &stu) { cout<<"Student(const Student &stu)"<<endl; } ~Student() { cout<<"~Student()"<<endl; } void setName(string _name) { m_strName = _name; } string getName() { return m_strName; } private: string m_strName; }; int main(void) { // 通过new方式实例化对象*stu Student stu; Student stu2 = stu; // 更改对象的数据成员为“慕课网” stu.setName("慕课网"); // 打印对象的数据成员 cout<<stu.getName()<<endl; return 0; }
Student() Student(const Student &stu) 慕课网 ~Student() ~Student()