C++的基础啊!不学好这一部分后面是完全看不懂的!!

基础不牢地动山摇!!!


目录

1. 类和对象基本概念

1.1 什么是类

1.2 什么是对象

2. 类的定义

2.1 创建语法

2.2 权限限定 作用

2.3 C++结构体在一定程度上可直接认为是类

3. 对象创建

3.1 普通对象

3.2 对象数组

3.3 new一个对象

4. 成员访问(初始化)

4.1 传参——通过提供公有接口传参的方式初始化数据

4.2 返回引用——通过提供公有接口返回值的方式初始化数据


1. 类和对象基本概念

1.1 什么是类

类:一系列事物的抽象,万事万物皆可为类

类由两部分组成:

        属性——事物的特征——数据类型

        行为——事物的操作——函数

1.2 什么是对象

对象——类的具体化/实体化

类的特点:继承、封装、多态(先不详细讲)

2. 类的定义

2.1 创建语法

class 类名
{

    //权限限定词
    public:
    protected:
    private:

};        //必须有一个

例如

include <iostream>
include <string>
using namespace std;

class Friend
{
public:
    //共有属性
    //成员函数
    void PrintData()
    {
    cout<<name<<"\t"<<age<<endl;
    }

protected:
    //保护属性
    //数据成员
    string name;
    int age;

private:
    //当前类不做继承处理,数据成员写成私有属性
};

int main()
{

    return 0;
}

2.2 权限限定 作用

  • 类外只能访问public属性下的东西,习惯把public下的东西称为类外的接口
  • 类外实现类中函数,需要类名限定,告诉别人这个函数是哪来的
  • protected和private类外都不可以访问,但可提供接口间接访问
  • 默认属性是私有属性
  • 权限限定词只是限定类外的访问,并不限定类中的访问
include <iostream>
include <string>
using namespace std;

class Friend
{
public:
    //共有属性
    //成员函数

    //类中实现函数
    void PrintData()
    {
    cout<<m_name<<"\t"<<m_age<<endl;
    }
    //为了访问不能访问的部分,提供接口
    void InitData(string name,int age)
    {
    
    }


protected:
    //保护属性
    //数据成员
    string m_name;
    int m_age;

private:
    //当前类不做继承处理,数据成员写成私有属性
};


//类外实现类中函数,需要类名限定
void Friend::InitData(string name,int age)
{
    m_name=name;
    m_age=age;
}

int main()
{
    Friend Lisa;
    Lisa.PrintData();//类外只能访问public属性
    //Lisa.name;//报错

    Lisa.InitData("Lisa",19);

    return 0;
}

2.3 C++结构体在一定程度上可直接认为是类

  • 默认属性是公有,把结构体当作是公有属性的类
  • 结构体中加上权限限定词后,就是class了

比如:这种情况下,mm.num、mm.name、mm.age都可以实现

struct MM
{
    int num;
    string name;
    int age;
}
void testMM()
{
    MM mm={2024138000,"xiaobai",24}
    等价于
    mm.num=2024138000;
    
}

但是在这种情况下,结构体中加上了限定词private,mm.name、mm.age就不能实现了,报错。因为mm.num属于默认的公有属性,所以可以使用。

struct MM
{
    int num;
private:
    string name;
    int age;


}
void testMM()
{
    MM mm={2024138000,"xiaobai",24}
    //等价于
    mm.num=2024138000;
    
    //mm.name;//报错

}

3. 对象创建

3.1 普通对象

普通对象一般用类名就可以

3.2 对象数组

没有学构造函数时,就按C语言中创造数组的方式就行。实际上,C++中用对象数组较少。

普通对象和数组对象举例:

include <iostream>
include <string>
using namespace std;

class Friend
{
public:
    void Print()
    {
    cout<<name<<"\t"<<age<<endl;
    }


    void InitData(string name,int age)
    {
    name=n_name;
    age=n_age
    }


protected:
    string name="默认值";
    int age=0;

};


//类外实现类中函数,需要类名限定
void Friend::InitData(string name,int age)
{
    m_name=name;
    m_age=age;
}

int main()
{
    Friend frd;
    frd.Print();
    
    Friend frd_array[4]
    for(int i=0;i<4;i++)
    {
    frd_array[i].InitData(string("name")+to_string(i),i+19);
    frd_array[i].Print(); 
    }

    return 0;
}

运行结果:

3.3 new一个对象

include <iostream>
include <string>
using namespace std;

class Friend
{
public:
    void Print()
    {
    cout<<name<<"\t"<<age<<endl;
    }


    void InitData(string name,int age)
    {
    name=n_name;
    age=n_age
    }


protected:
    string name="默认值";
    int age=0;

};



//类外实现类中函数,需要类名限定
void Friend::InitData(string name,int age)
{
    m_name=name;
    m_age=age;
}

int main()
{
    Friend frd;
    frd.Print();
    
    Friend frd_array[4]
    for(int i=0;i<4;i++)
    {
    frd_array[i].InitData(string("name")+to_string(i),i+19);
    frd_array[i].Print(); 
    }


    Friend *fr=new Friend;
    fr->Print();


    return 0;
}

运行结果:

4. 成员访问(初始化)

指针、结构体、数组的访问上面已经运用,这部分主要讲初始化咯~~

4.1 传参——通过提供公有接口传参的方式初始化数据

第一步:在class的公有属性中创造初始化函数InitData

第二部:在main函数里调用

完整代码如下:

include <iostream>
include <string>
using namespace std;

class Friend
{
public:
    void Print()
    {
    cout<<name<<"\t"<<age<<endl;
    }


    void InitData(string name,int age)
    {
    name=n_name;
    age=n_age
    }


protected:
    string name;
    int age;

};


//类外实现类中函数,需要类名限定
void Friend::InitData(string name,int age)
{
    m_name=name;
    m_age=age;
}

int main()
{
    Friend frd;
    frd.InitData("girl",19);
    frd.Print();

    return 0;
}

运行结果:

4.2 返回引用——通过提供公有接口返回值的方式初始化数据

第一步:在class的公有属性中写出引用函数

第二步:在main函数中调用

完整代码如下:

include <iostream>
include <string>
using namespace std;

class Friend
{
public:
    void Print()
    {
    cout<<name<<"\t"<<age<<endl;
    }


    string& GetName()
    {
    return m_name;
    }

    string& getAge()
    {
    return m_age;
    }


protected:
    string name;
    int age;

};


//类外实现类中函数,需要类名限定
void Friend::InitData(string name,int age)
{
    m_name=name;
    m_age=age;
}

int main()
{
    Friend frd;
    frd.GetName()="mm";
    frd.GetAge()=18;
    frd.Print();

    return 0;
}

运行结果:

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐