【C++】类和对象
类:一系列事物的抽象,万事万物皆可为类类由两部分组成:属性——事物的特征——数据类型行为——事物的操作——函数对象——类的具体化/实体化类的特点:继承、封装、多态(先不详细讲)class 类名//权限限定词public:protected:private://必须有一个例如public://共有属性//成员函数protected://保护属性//数据成员int age;private://当前类不
C++的基础啊!不学好这一部分后面是完全看不懂的!!
基础不牢地动山摇!!!
目录
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;
}
运行结果:
更多推荐
所有评论(0)