C++ 类简介
一、什么是类
1、类定义
类是对某一类具有共同特征的事物的抽象描述。
例如电脑类,具有键盘、屏幕、电源键等共同特征
2、类的本质
类是一种用户自定义的引用数据类型,它的本质是数据类型,并不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作
二、类的特性
1、抽象;
2、封装和数据隐藏;
3、继承;
4、多态;
5、代码可重用性
三、声明类
1、类的声明格式
class className
{
private:
//
protected:
//
public:
//
};
例:
class People
{
private:
char name[40];
float height;
float weight; //数据成员
public:
void getWeight();
void getHeight(); //成员函数
};
定义类后,类名就是新的数据类型,即People就像int一样可以定义变量
2、类的成员访问权限
类使用private、protected和public关键字控制成员的访问权限,类成员的默认访问权限为private
1)、private成员:能被本类的成员函数(不管是哪一种控制符声明的成员函数,都可以)、友元函数
2)、protected成员:可通过本类的成员函数(不管是哪一种控制符声明的成员函数,都可以)、友元函数、其派生类的成员函数(不管是哪一种控制符声明的成员函数,都可以)
3)、public成员:能被本类的成员函数(不管是哪一种控制符声明的成员函数,都可以)、友元函数、本类的对象、其派生类的成员函数(不管是哪一种控制符声明的成员函数,都可以);
3、成员访问类型的选择
1)、数据成员通常声明为private属性,这样可以实现数据隐藏;
2)、成员函数通常声明为public属性,这样在外部可以访问;
3)、对于类成员,若想让派生类能够访问访问而不想让外部访问,则声明为protected属性
四、对象的创建和初始化
1、创建对象
创建对象同创建数据类型变量相似,格式为:
className objectName;
2、对象的初始化
对象的初始化有四种形式:
1)、显式调用构造函数初始化;
2)、隐式调用构造函数初始化;
3)、动态初始化;
4)、C++11列表初始化
#include <iostream>
using namespace std;
class Student
{
private:
int m_age;
float m_score;
public:
Student(){}
Student(int age, float score)
{
m_age = age;
m_score = score;
}
void show()
{
cout << "age = " << m_age
<< " score = " << m_score
<< endl;
}
};
int main()
{
Student stu = Student(16, 90); //显式调用构造函数初始化
Student stu1(17, 91); //隐式调用构造函数初始化
Student *sp = new Student(18, 92); //动态初始化
//列表初始化
//Student stu = {16, 90};
//Student stu1{17, 91};
//Student *sp = new Student{18, 92};
stu.show();
stu1.show();
sp->show();
return 0;
}
五、访问类成员
可通过两种方式访问类成员:
1、通过类对象访问类成员
class People
{
public:
char name[40];
float height;
float weight; //数据成员
public:
void getWeight();
void getHeight(); //成员函数
};
...
Pelople peo;
peo.height = 180;
2、通过指向类的指针访问类成员
class People
{
public:
char name[40];
float height;
float weight; //数据成员
public:
void getWeight();
void getHeight(); //成员函数
};
...
People *peo = new People;
peo->height = 180;
#include <iostream>
using namespace std;
//类的声明
class Student{
private: //私有的
char *m_name;
int m_age;
float m_score;
public: //公有的
void setname(char *name);
void setage(int age);
void setscore(float score);
void show();
};
//成员函数的定义
void Student::setname(char *name)
{
m_name = name;
}
void Student::setage(int age)
{
m_age = age;
}
void Student::setscore(float score)
{
m_score = score;
}
void Student::show()
{
cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
}
int main()
{
//在栈上创建对象
Student stu;
stu.setname("小明");
stu.setage(15);
stu.setscore(92.5f);
stu.show();
//在堆上创建对象
Student *pstu = new Student;
pstu->setname("李华");
pstu->setage(16);
pstu->setscore(96);
pstu->show();
return 0;
}
运行结果:小明的年龄是15,成绩是92.5 李华的年龄是16,成绩是96
参考:
1、《C++ Primer Plus》
2、C++访问控制符详解