类的设计
C++对结构体是有增强的
可以包含函数作为结构体成员
可以直接定义变量
在结构体成员函数里面可以直接访问结构体成员变量
struct student{string name;int age;float score;void play_game(const string &name);}void student::play_game(const string game){}int main(){}
在C++,如果一个类的成员被声明为私有,那么它只能被该类内部的成员函数,友元函数或友元类访问,如果成员不加修饰符则默认为私有
class 类名称{public:private:protected:}
成员函数:在类中说明函数原型,并在函数名前使用类名::加以限定
也可以直接在类中给出函数体,形成内联函数
允许声明重载函数和带默认参数的函数
protect(保护成员):只能被该类的成员函数和其派生类的成员函数访问
struct和class的区别:
主要体现在默认访问权限上,struct的成员默认为public,class成员默认为private
对象的创建
对象本质上是一块内存,这块内存中存放的是创建这个对象的类描述的数据
在函数内部,用类创建一个对象,这个对象就是栈上创建的对象
int main(){Student stu;return 0; }
在函数调用结束时栈上分配的内存会自动释放,这个对象也就销毁了
使用new'运算符可以在堆区开辟空间
在堆区开辟的空间,只需要把起始地址传过来就可以
Student * pstu = new Student; //因为Student 的类型是Student ,所以 pstu的类型为 Student*.....delete pstu;
this指针
this是一个特殊的指针,指向类对象自身的首地址
每个类对象的非静态成员函数都有一个this指针,指向调用成员函数对象的首地址
如果在成员函数中需要引用整个对象则用*this 解引用
当成员函数的参数与成员变量同名时,可使用this区分
构造函数
作用 :给对象进行初始化
特征:名称与类的名称相同,且没有返回值
class Student(){string name;float score;char gender;Student(string name,float score,char gender){this->name = name;//this是一个指针this->score = score;this->gender = gender;}}int main(){Student stu("小红",88,'M'); }
如果没写构造函数,系统会默认提供一个无参的构造函数
函数名相同,参数不同,叫做函数的重载
class Student(){string name;float score;char gender;Student(string name,float score,char gender){this->name = name;//this是一个指针this->score = score;this->gender = gender;}Student(){}}int main(){Student stu;//调用的是无参的构造函数Student stu(name,score,gender);//调用的是有参的构造函数}