类的设计
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);//调用的是有参的构造函数
}