C++组合类的构造函数设计与对象初始化

需积分: 10 4 下载量 56 浏览量 更新于2024-07-13 收藏 782KB PPT 举报
"C++类与对象相关的知识点" 在C++编程中,类(Class)是面向对象编程的核心,它是一种用户自定义的数据类型,用于封装数据和相关操作。类可以看作是对象的蓝图,定义了对象的属性(数据成员)和行为(成员函数)。对象是类的实例,它具有类所定义的特性和功能。 **3.1 类与对象概念的引入** 类是数据和操作数据的方法的集合,它允许我们创建抽象的数据类型。对象是类的具体表现,是类的一个实例,拥有类定义的所有属性和行为。在C++中,通过定义类来创建对象,使用关键字`class`来开始类的定义。 **3.2 类的声明** 类声明定义了类的结构,包括类的名字、数据成员和成员函数的原型。例如: ```cpp class ClassName { public: 数据成员; 成员函数(); }; ``` 这里的`public`关键字表明数据成员和成员函数对外部代码是可见的,可以被直接访问。 **3.3 对象的声明** 创建类的对象使用以下语法: ```cpp ClassName objName; ``` `objName`是类`ClassName`的一个实例。 **3.4 构造函数与析构函数** **3.4.1 构造函数** 构造函数是类的一个特殊成员函数,用于初始化新创建的对象。它有与类同名且无返回值。在创建对象时自动调用。如: ```cpp class A { public: A(int x) { ... } // 构造函数 }; A obj(5); // 调用构造函数初始化对象 ``` **3.4.2 析构函数** 析构函数在对象生命周期结束时自动调用,负责释放对象可能占用的资源。其名字以波浪线`~`开头。例如: ```cpp class A { public: ~A() { ... } // 析构函数 }; ``` **3.5 类的组合** **3.5.1 组合类** 当一个类包含其他类的对象作为其数据成员时,称此类为组合类。创建组合类的对象时,会自动创建内嵌对象。例如: ```cpp class A { public: A(int x) : m_x(x) {} private: int m_x; }; class B { public: B(A a) : mA(a) {} private: A mA; }; B objB(A(5)); // 创建B对象,同时创建内嵌的A对象 ``` **3.6 静态成员** **3.6.1 静态数据成员** 静态数据成员是所有对象共享的,只有一份存储空间。声明时使用`static`关键字: ```cpp class C { public: static int count; // 静态数据成员 }; ``` **3.6.2 静态成员函数** 静态成员函数不与任何特定对象关联,可以直接通过类名调用。同样使用`static`关键字声明: ```cpp class D { public: static void printHello() { ... } // 静态成员函数 }; D::printHello(); // 直接通过类名调用 ``` **3.7 友元** **3.7.1 友元函数** 友元函数不是类的成员,但可以访问类的私有或受保护成员。声明友元函数使用`friend`关键字: ```cpp class E { friend void friendFunction(E& e); private: int secret; }; void friendFunction(E& e) { e.secret = 10; } // 访问私有成员 ``` **3.7.2 友元类** 友元类的成员函数可以访问另一个类的私有或受保护成员: ```cpp class F; class G { friend class F; private: int hidden; }; class F { public: void accessHidden(G& g) { g.hidden = 20; } }; ``` **3.8 常对象、常成员函数与常数据成员** **3.8.1 常对象** 常对象一旦创建,其成员就不能被修改。常对象使用`const`关键字声明: ```cpp H const objH; // 常对象 ``` **3.8.2 常数据成员** 常数据成员是对象内的不可修改的成员,声明时使用`const`关键字: ```cpp class I { public: const int constantValue = 5; // 常数据成员 }; ``` **3.8.3 常成员函数** 常成员函数不能修改对象的状态,声明时在函数声明和定义前加上`const`: ```cpp class J { public: void display() const { ... } // 常成员函数 }; ``` **3.9 类的作用域及对象的生存期** 类的作用域定义了类内的成员可被访问的范围。对象的生存期是从创建到销毁的时间段。 **3.10 面向对象标记** C++中的面向对象特性包括封装、继承和多态,这些都通过类和对象实现。 总结来说,C++的类与对象是构建复杂程序的关键元素,它们提供了数据封装和抽象,使得代码更易于维护和扩展。通过熟练掌握类和对象的概念,以及相关的构造函数、静态成员、友元等特性,开发者可以编写出高效、模块化的代码。