吉林大学C++课程:友元类与面向对象编程基础

需积分: 35 11 下载量 140 浏览量 更新于2024-08-23 收藏 2.25MB PPT 举报
友元类是C++编程中的一个重要概念,它允许特定的函数或类访问另一个类的私有和保护成员,增强了代码的灵活性和可访问性。在给出的吉林大学C++课件中,我们首先了解到了如何通过"friend"关键字声明友元,如在Student类中,Teacher类的成员函数`p`和`q`被声明为Student类的友元,这样Teacher类就可以访问Student类的私有变量`age`和`score`。 友元关系的特点包括: 1. 非对称性:友元关系不是相互的,即类A可以将类B设为友元,但类B不一定将类A设为友元。这意味着Teacher类可以访问Student类的私有成员,但反之则不行。 2. 非传递性:友元关系不具有传递性,即使类B是类A的友元,类C是类B的友元,这并不自动意味着类C也是类A的友元。这种设计保证了代码的封装性和安全性,避免了不必要的信息暴露。 友元通常用于以下场景: - 解决类之间需要共享信息的问题,比如在多态和模板中,友元允许不同类的实例访问它们共同需要的内部细节。 - 在需要访问或修改其他类的私有数据时,比如在测试和调试工具中,友元允许编写辅助函数或类来操作目标类的内部状态。 在C++的发展历程中,Bjarne Stroustrup在1980年代基于C语言创建了C++,旨在克服C语言在大型项目中模块化和重用性方面的局限。C++作为C的超集,不仅保留了C的语言特性,还引入了面向对象编程的概念,如类、对象、继承和封装等,使得程序设计更加灵活和模块化。 课件的开始部分介绍了C++语言的基本目标,即理解其语义和语法,掌握面向对象编程思想,并通过实践提高编程能力。此外,还回顾了C语言的历史和特点,以及C++作为其改进版本的优势,比如支持面向对象编程,增加了代码的复用性和可维护性。 最后,课件提到了面向过程和面向对象两种编程范式的区别,以及面向对象的两个核心概念——对象和继承。对象是封装了数据和行为的单元,而继承则是通过继承已有的类来创建新类,实现代码的复用和扩展。 友元类是C++中一个关键的概念,它在实际编程中扮演着连接不同类之间交互的重要角色,帮助开发者更好地组织和管理复杂的程序结构。理解并合理运用友元关系,是成为一名高级C++程序员所必备的技能之一。
2023-07-22 上传

解析以下错误:CMake Error at /Users/fym/Library/Application Support/JetBrains/Toolbox/apps/CLion/ch-0/232.8453.115/CLion 2023.2 EAP.app/Contents/bin/cmake/mac/share/cmake-3.26/Modules/CMakeTestCXXCompiler.cmake:60 (message): The C++ compiler "/usr/local/bin/g++-13" is not able to compile a simple test program. It fails with the following output: Change Dir: /Users/fym/Desktop/C++/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-HWLOEj Run Build Command(s):/Users/fym/Library/Application Support/JetBrains/Toolbox/apps/CLion/ch-0/232.8453.115/CLion 2023.2 EAP.app/Contents/bin/ninja/mac/ninja -v cmTC_1dd3b && [1/2] /usr/local/bin/g++-13 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk -fdiagnostics-color=always -o CMakeFiles/cmTC_1dd3b.dir/testCXXCompiler.cxx.o -c /Users/fym/Desktop/C++/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-HWLOEj/testCXXCompiler.cxx [2/2] : && /usr/local/bin/g++-13 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/cmTC_1dd3b.dir/testCXXCompiler.cxx.o -o cmTC_1dd3b && : FAILED: cmTC_1dd3b : && /usr/local/bin/g++-13 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/cmTC_1dd3b.dir/testCXXCompiler.cxx.o -o cmTC_1dd3b && : ld: unsupported tapi file type '!tapi-tbd' in YAML file '/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/lib/libSystem.tbd' for architecture x86_64 collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed. CMake will not be able to correctly generate this project. Call Stack (most recent call first): CMakeLists.txt:2 (project) -- Configuring incomplete, errors occurred! [无法重新加载]

2023-07-10 上传