C++ (类的设计,对象的创建,this指针,构造函数)

发布于:2025-04-16 ⋅ 阅读:(14) ⋅ 点赞:(0)

类的设计

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

}