c++类&对象

简介: c++类&对象

在C++中,类和对象是面向对象编程(OOP)的核心概念。下面我将详细解释C++中的类和对象,并附带编程示例,以确保内容达到约1400字。

一、类(Class)

类是对象的抽象模板,它定义了一个对象应该拥有的属性和方法。类中的变量被称为成员变量(或属性),而函数被称为成员函数(或方法)。

示例

#include <iostream> 
#include <string> 
// 定义一个名为“Student”的类 
class Student { 
public: 
// 构造函数 
Student(std::string name, int age, float score) 
: name_(name), age_(age), score_(score) {} 
// 成员变量(属性) 
std::string name_; 
int age_; 
float score_; 
// 成员函数(方法) 
void display() const { 
std::cout << "Name: " << name_ << ", Age: " << age_ << ", Score: " << score_ << std::endl; 
} 
// 另一个成员函数,用于修改分数 
void setScore(float newScore) { 
if (newScore >= 0 && newScore <= 100) { 
score_ = newScore; 
} else { 
std::cout << "Invalid score!" << std::endl; 
} 
} 
}; 
// 主函数 
int main() { 
// 创建Student类的对象 
Student student1("Alice", 20, 85.5); 
// 调用对象的成员函数 
student1.display(); // 输出学生信息 
// 修改分数 
student1.setScore(90); 
student1.display(); // 再次输出学生信息,分数已更改 
return 0; 
}

二、对象(Object)

对象是类的实例,它拥有类定义的属性和方法。在上面的示例中,student1就是一个Student类的对象。

三、封装(Encapsulation)

封装是面向对象编程的四大基本特性之一,它隐藏了对象的内部实现细节,只对外提供必要的接口。在C++中,可以通过将类的成员变量声明为privateprotected来实现封装,而成员函数则作为访问这些成员变量的接口。

四、继承(Inheritance)

继承允许我们创建一个新的类(派生类),它继承了一个或多个已存在的类(基类)的属性和方法。通过继承,我们可以实现代码的重用和扩展。

示例

class GraduateStudent : public Student { // 派生自Student类 
public: 
GraduateStudent(std::string name, int age, float score, std::string thesisTitle) 
: Student(name, age, score), thesisTitle_(thesisTitle) {} 
// 新增的成员变量 
std::string thesisTitle_; 
// 新增的成员函数 
void displayThesisTitle() const { 
std::cout << "Thesis Title: " << thesisTitle_ << std::endl; 
} 
}; 
// 在main函数中创建GraduateStudent对象并调用其方法 
// ...

五、多态(Polymorphism)

多态允许不同的对象对同一消息做出不同的响应。在C++中,多态性通常通过虚函数和函数重载来实现。

示例(使用虚函数)

class Shape { 
public: 
virtual void draw() const { // 虚函数 
std::cout << "Drawing a generic shape" << std::endl; 
} 
// ... 
}; 
class Circle : public Shape { 
public: 
void draw() const override { // 重写基类的虚函数 
std::cout << "Drawing a circle" << std::endl; 
} 
// ... 
}; 
// 在main函数中通过基类指针调用派生类的draw方法 
// ...

六、抽象类(Abstract Class)

抽象类是一个不能被实例化的类,它通常包含纯虚函数。抽象类主要用于定义接口,强制派生类实现特定的方法。

七、友元(Friend)

友元可以是另一个类或者函数,它可以访问一个类的私有和保护成员。但过度使用友元可能会破坏封装性,应谨慎使用。

八、运算符重载(Operator Overloading)

C++允许我们重新定义或重载大部分内置运算符,以便它们能用于自定义的数据类型。例如,我们可以重载+运算符以使其能够用于两个自定义类对象的相加。

总结

类和对象是C++面向对象编程的基础。通过封装、继承、多态等特性,我们可以构建出模块化、可重用和易于维护的代码。以上示例仅展示了面向对象编程的一些基本概念和用法,实际上还有更多高级特性和技术等待我们去探索和实践。

相关文章
|
9天前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
55 30
|
24天前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
24天前
|
存储 编译器 C++
C ++初阶:类和对象(中)
C ++初阶:类和对象(中)
|
24天前
|
C++
C++(十六)类之间转化
在C++中,类之间的转换可以通过转换构造函数和操作符函数实现。转换构造函数是一种单参数构造函数,用于将其他类型转换为本类类型。为了防止不必要的隐式转换,可以使用`explicit`关键字来禁止这种自动转换。此外,还可以通过定义`operator`函数来进行类型转换,该函数无参数且无返回值。下面展示了如何使用这两种方式实现自定义类型的相互转换,并通过示例代码说明了`explicit`关键字的作用。
|
24天前
|
存储 设计模式 编译器
C++(十三) 类的扩展
本文详细介绍了C++中类的各种扩展特性,包括类成员存储、`sizeof`操作符的应用、类成员函数的存储方式及其背后的`this`指针机制。此外,还探讨了`const`修饰符在成员变量和函数中的作用,以及如何通过`static`关键字实现类中的资源共享。文章还介绍了单例模式的设计思路,并讨论了指向类成员(数据成员和函数成员)的指针的使用方法。最后,还讲解了指向静态成员的指针的相关概念和应用示例。通过这些内容,帮助读者更好地理解和掌握C++面向对象编程的核心概念和技术细节。
|
1月前
|
存储 算法 编译器
c++--类(上)
c++--类(上)
|
1月前
|
编译器 C++
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
|
1月前
|
编译器 C++
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
|
24天前
|
存储 C++
C++(五)String 字符串类
本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
|
1月前
|
存储 C++
C++ dll 传 string 类 问题
C++ dll 传 string 类 问题
20 0