1. 类的概述
1.1 具体示例
cpp
类是描述一类事物的特征和行为的统称,抽象的不存在的,泛指的概念,例如:描述一个人,从外观上(特征)和言行举止(行为)上进行描述
外观上(特征):
长头发
蓝牙眼睛
白皮肤
带了美瞳
年龄多大
身高
体重
.....
言行举止(行为):
走路
跑步
说话
学习
打游戏
.......
1.2 对象
是指类的实例化(实实在在存在的),是特指的概念,例如:人类实例化对象张三、李四、王二等等
1.3 程序来描述
cpp
关键字:class -------描述一个类
格式:
class 类名
{
//外观---特征
长头发
蓝牙眼睛
白皮肤
带了美瞳
年龄多大
身高
体重
.....
//言行举止----行为
走路
跑步
说话
学习
打游戏
.......
};
例如:
class People
{
//特征
int eyes;
int age;
int height;
int weight;
char name[20];
.....
//行为
void walk()
{}
void run()
{}
void play()
{}
void study()
{}
..........
};
特征(属性):
指的是变量,称为类的成员变量
行为(方法):
指的是函数,称为类的成员函数
类的成员:
包含了成员变量和成员函数
1.4 创建类
1.4.1 第一种方式,直接在主程序文件中创建类
main.c
cpp
#include "iostream"
using namespace std;
//第一种方式,直接在主程序文件中创建类
class People1
{
int age;//年龄
int height;//身高
char name[20];//姓名
//函数的实现第一种方式:在类中实现函数
void walk()//走路的行为
{
cout << "走路" << endl;
}
void play()//玩的行为
{
cout << "玩耍" << endl;
}
void study();//学习
};
//函数的实现第二种方式:在类外实现函数
/*
格式:
函数返回值类型 类名 ::函数名(参数列表)
{
//代码
}
*/
void People1::study()
{
cout << "学习" << endl;
}
int main()
{
return 0;
}
1.4.2 分模块创建
People2.h
cpp
#pragma once
#include "iostream"
using namespace std;
class People2
{
int age;
int height;
char name[20];
void walk()
{
cout << "走路" << endl;
}
void study()
{
cout << "学习" << endl;
}
//这个函数的实现我们换一种方式实现,我们放在people2.cpp中实现
void play_game();
};
People2.cpp
cpp
#include "People2.h"
/*
格式:
函数返回值类型 类名 ::函数名(参数列表)
{
//代码
}
*/
void People2::play_game()
{
cout << "玩游戏" << endl;
}
2. 实例化的两种方式
是指类的实例化(实实在在存在的),是特指的概念,例如:人类实例化对象张三、李四、王二等等
实例化的两种方式:
2.1 在栈区进行实例化
格式:
类名对象名; //类名和对象名就是标识符, 满足语法规范
例如:
People zhangsan ; //实例化zhangsan对象
People lisi;
2.1.1 通过类的对象去进行访问
(1)对象是在栈区实例化
符号:"."
格式:
对象名 . 成员 ; //访问类的成员
例如:
zhangsan.height=180;
zhangsan.walk();
main.cpp
cpp
#include "iostream"
using namespace std;
//类和对象实例化
//第一种方式,直接在主程序文件中创建类
class People1
{
public:
int age;//年龄
int height;//身高
char name[20];//姓名
//函数的实现第一种方式:在类中实现函数
void walk()//走路的行为
{
cout << "走路" << endl;
}
void play()//玩的行为
{
cout << "玩耍" << endl;
}
void study();//学习
};
//函数的实现第二种方式:在类外实现函数
/*
格式:
函数返回值类型 类名 ::函数名(参数列表)
{
//代码
}
*/
void People1::study()
{
cout << "学习" << endl;
}
int main()
{
//第一种 实例化一个People1
People1 people1;
people1.walk();
people1.play();
people1.study();
cout << endl;
//第二种 实例化一个People1
People1* people2 = new People1;
people2->walk();
people2->play();
people2->study();
return 0;
}
2.2 在堆区进行实例化
格式: .
类名 * 对象名 = new 类名; //在堆区开辟类大小的空间,并用对象指向该空间
People* zhangsan = new People //注意释放空间:delete zhangsan
2.2.1 如何访问类的成员
(2)对象是在堆区实例化
符号:"->"
格式:
对象名 -> 成员 ;//访问类的成员
例如:
zhangsan->height=180;
zhangsan->walk();
main.cpp
cpp
//第二种 实例化一个People1
People1* people2 = new People1;
people2->walk();
people2->play();
people2->study();
cpp
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() {
// 无参构造函数的实现
}
void setValue(int value) {
data = value;
}
void display() {
cout << "Value: " << data << endl;
}
int data;
};
int main() {
// 在堆上创建对象
MyClass* ptr = new MyClass();
// 为成员变量赋值
ptr->setValue(42);
ptr->display();
ptr->data = 50;
ptr->display();
// 释放对象所占用的内存
delete ptr;
return 0;
}
2.3 面试题:结构体和类的区别是什么?
仅供参考
- 默认访问权限:
在结构体中,默认的成员访问权限是公共的(public)。
在类中,默认的成员访问权限是私有的(private)。
- 成员函数:
在结构体中,你可以包含成员函数,但这些函数默认是公共的。
在类中,你可以有公共、私有和受保护的成员函数,具体取决于你在类定义中的声明。
- 继承:
在结构体中,可以进行继承,但默认继承权限是公共的。
在类中,可以进行公共、私有和受保护的继承,具体取决于你在类定义中的声明。
- 默认构造函数:
在结构体中,如果没有提供构造函数,会有一个默认的构造函数。
在类中,如果没有提供构造函数,也会有一个默认的构造函数,但是如果你提供了自定义构造函数,那么默认构造函数就不再提供。