C++ 类声明
引言
在C++中,类是面向对象编程的基本构建块。它是数据和函数的集合,代表现实世界中的实体。类声明是定义这些实体特性和行为的第一步,是学习C++面向对象编程的基础。
通过本文,你将学习:
- 类声明的基本语法
- 访问修饰符的使用
- 类成员(数据成员和成员函数)的声明
- 类声明与定义的区别
- 实际应用中的类声明案例
什么是类声明?
类声明是告诉编译器一个特定类型的类存在,它包含哪些数据和函数,以及它们 的访问权限。类声明为程序设计提供了蓝图,就像建筑师的设计图纸一样。
基本语法
C++中类声明的基本语法如下:
class 类名 {
访问修饰符:
数据成员;
成员函数;
};
其中:
class
是关键字类名
遵循C++标识符命名规则,通常首字母大写访问修饰符
控制对类成员的访问权限数据成员
是类的属性(变量)成员函数
是类的方法(函数)
访问修饰符
C++提供了三种访问修饰符:
- public: 可以被任何函数访问
- private: 只能被类的成员函数访问
- protected: 可以被类的成员函数和派生类访问
提示
如果不指定访问修饰符,类中的成员默认为private。
简单的类声明示例
下面是一个简单的Student
类声明:
class Student {
public:
// 公有成员函数
void setName(string n);
string getName();
void setAge(int a);
int getAge();
private:
// 私有数据成员
string name;
int age;
};
声明数据成员
数据成员是类的变量,用于存储类的状态信息。
class Rectangle {
private:
double length; // 长度
double width; // 宽度
public:
// 成员函数声明将在后面介绍
};
数据成员的特点
- 封装性:通常声明为私有,通过公有方法访问
- 持久性:对象存在期间,数据成员一直存在
- 类型多样性:可以是基本类型、指针、引用或其他类的对象
声明成员函数
成员函数是类的函数,用于操作类的数据成员,实现类的行为。
class Circle {
private:
double radius;
public:
// 构造函数
Circle();
Circle(double r);
// 普通成员函数
double getArea();
double getPerimeter();
// 设置和获取属性的函数
void setRadius(double r);
double getRadius();
};
成员函数的声明与定义分离
C++允许将类的声明和成员函数的定义分开:
// 类声明部分
class Time {
private:
int hour;
int minute;
int second;
public:
Time(); // 默认构造函数
void setTime(int h, int m, int s);
void printTime();
};
// 成员函数定义部分
Time::Time() {
hour = 0;
minute = 0;
second = 0;
}
void Time::setTime(int h, int m, int s) {
hour = (h >= 0 && h < 24) ? h : 0;
minute = (m >= 0 && m < 60) ? m : 0;
second = (s >= 0 && s < 60) ? s : 0;
}
void Time::printTime() {
cout << hour << ":" << minute << ":" << second << endl;
}
内联成员函数
如果在类声明中直接定义成员函数,则该函数自动成为内联函数:
class Counter {
private:
unsigned int count;
public:
// 内联成员函数
Counter() { count = 0; }
void increment() { count++; }
unsigned int getCount() { return count; }
};
构造函数和析构函数的声明
构造函数和析构函数是特殊的成员函数,分别在对象创建和销毁时自动调用:
class Person {
private:
string* name;
int age;
public:
// 构造函数
Person(); // 默认构造函数
Person(string n, int a); // 带参数构造函数
Person(const Person& p); // 复制构造函数
// 析构函数
~Person();
// 其他成员函数
void display();
};
类声明中的静态成员
静态成员属于类而非对象, 所有对象共享一个静态成员副本:
class Account {
private:
string accountNumber;
double balance;
static double interestRate; // 静态数据成员
static int accountCount; // 静态数据成员
public:
Account(string accNo, double bal);
~Account();
static void setInterestRate(double rate); // 静态成员函数
static double getInterestRate(); // 静态成员函数
static int getAccountCount(); // 静态成员函数
};
备注
静态数据成员通常需要在类外进行定义和初始化。
类声明中的常量成员函数
常量成员函数承诺不会修改对象的状态:
class Date {
private:
int day;
int month;
int year;
public:
Date(int d, int m, int y);
// 常量成员函数
int getDay() const;
int getMonth() const;
int getYear() const;
void setDate(int d, int m, int y);
};