一、类定义
class Box
{
public:
double length; // 盒子的长度
double breadth; // 盒子的宽度
double height; // 盒子的高度
};
- 类名通常首字母大写
- 注意末尾的分号,不能忘
- public,private,protected有什么区别?
- 和 Python 区别
2、对象定义
ClassName ObjectName;
Box Box1; // 声明 Box1,类型为 Box
3、访问类成员及成员函数
在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。
在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 public 属性的成员,不能访问 private、protected 属性的成员。
public 成员变量和成员函数:
类的对象的公共数据成员可以使用直接成员访问运算符 (.) 来访问
private 成员
the private data members are not allowed to be accessed directly by the object.
This access control is given by Access modifiers in C++. There are three access modifiers : public, private and protected.
#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;
}
引出构造函数
将成员变量都声明为 private,如何给它们赋值呢,又如何读取它们的值呢?
我们可以额外添加两个 public 属性的成员函数,
一个用来设置成员变量的值,一个用来修改成员变量的值。
setname()、setage()、setscore() 函数就用来设置成员变量的值;如果希望获取成员变量的值,可以再添加三个函数 getname()、getage()、getscore()。
给成员变量赋值的函数通常称为 set 函数
,它们的名字通常以set开头,后跟成员变量的名字;读取成员变量的值的函数通常称为 get 函数
,它们的名字通常以get开头,后跟成员变量的名字。
除了 set 函数和 get 函数,在创建对象时还可以调用构造函数来初始化各个成员变量
。不过构造函数只能给成员变量赋值一次,以后再修改还得借助 set 函数。
引出类的封装
这种将成员变量声明为 private、将部分成员函数声明为 public 的做法体现了类的封装性。所谓封装,是指尽量隐藏类的内部实现,只向用户提供有用的成员函数。
4、构造函数
-
识别
它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行 -
目的:
创建对象的同时为成员变量赋值 -
怎么用
-
特点
类中一定有构造函数
(用户自己创建或是编译器自动生成)
构造函数必须是 public 属性的
,否则创建对象时无法调用。当然,设置为 private、protected 属性
也不会报错,但是没有意义
。
构造函数没有返回值
,因为没有变量来接收返回值,即使有也毫无用处,这意味着:不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许;函数体中不能有 return 语句
。
注意:
一个类必须有构造函数
,要么用户自己定义,要么编译器自动生成。一旦用户自己定义了构造函数,不管有几个,也不管形参如何,编译器都不再自动生成
5、封装
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体