一、概念
在C++中,类是一种用户定义的数据类型,用于封装数据和方法。类是面向对象编程的核心概念之一,它允许你创建具有特定属性和行为的对象。对象是类的实例,它是内存中的一个具体实体,可以调用类中定义的方法和访问类中定义的数据成员。
- 类和结构体的区别:
在C++中,类和结构体都可以用来定义自定义的数据类型,它们的语法和功能有很多相似之处,但也有一些区别:
(1)默认访问权限:
- 类的成员默认是私有的,即在类定义中不显式声明为公有(
public
)或者保护(protected
)的成员,默认为私有(private
)。 - 结构体的成员默认为公有(
public
)。
(2)继承:
- 类支持继承,可以通过派生类来继承基类的成员。
- 结构体不支持继承。
(3)类型别名: - 类不能直接定义类型别名,需要使用
typedef
或者using
关键字。 - 结构体可以直接定义类型别名。
(4)默认构造函数: - 类在没有显式定义构造函数时,会自动生成默认构造函数。
- 结构体在没有显式定义构造函数时,也会自动生成默认构造函数。
(5)成员函数: - 类的成员函数默认是内联的。
- 结构体的成员函数默认是非内联的。
总的来说,类更适合用于面向对象编程的场景,它提供了更多的封装和抽象特性,而结构体更适合用于简单的数据聚合和轻量级对象的场景。
#include <iostream>
using namespace std;
// 定义一个动物的类
class Animal
{
public: //手动设置为公有属性,即实例化的对象可以直接访问
void EatFood() { // 类的成员函数
cout << "我要吃食物" << endl;
}
char *name; //类的数据成员
};
int main() {
// 创建类的对象
Animal Cat;
Animal Dog;
// 访问对象的成员函数
Cat.EatFood(); //因为是公有属性,所以可以直接访问。
// 访问对象的数据成员
Dog->name="花花";
cout << "Dog nameis: " << Dog->name<< endl;
return 0;
}
二、类的访问控制
public:公有属性,凡是在它下面声明的变量和函数,都可以在类的内部和外部访问。
private: 私有属性,凡是在它下面声明的变量和函数,只能在类的内部访问。
protected: 保护属性,凡是在它下面声明的变量和函数,只能在类的内部以及派生类(子类)中访问。
(1)公有属性、私有/保护属性使用区别:
#include <iostream>
using namespace std;
// 定义一个动物的类
class Animal
{
public: //手动设置为公有属性,即实例化的对象可以直接访问
void EatFood() { // 类的成员函数
cout << "我要吃食物" << endl;
}
char *name; //类的数据成员
private:
int number;
protected:
char Test[100];
};
int main() {
// 创建类的对象
Animal Cat;
Cat.EatFood(); //公有属性可以直接访问
/*
私有属性和保护属性不可以直接用对象访问
Cat.number=2;
Cat.Test="hhhh";
*/
return 0;
}
(2)访问私有属性和保护属性:
私有属性和保护属性,只能内部访问,如通过类内部的成员函数进行访问。
● student.h
//student.h
#ifndef _STUDENT_H_
#define _STUDENT_H_
#include <iostream>
using namespace std;
class Student
{
public:
int GetAge(); //声明类的成员函数,在函数的其它地方实现
int SetAge(int student_age);
private:
int age;
char name[32];
};
#endif
● student.cpp
#include "student.h"
int Student::SetAge(int student_age)
{
age= student_age;
}
int Student::GetAge() //在student.cpp中可以实现类的函数
{
return age; //返回私有属性成员
}
● main.cpp
#include "student.h"
int main(int argc, char const *argv[])
{
Student qjl;
qjl.SetAge(18);
cout<<qjl.GetAge()<<endl;
return 0;
}