第218页 第7章 类与对象
prife (相濡以沫,不如相忘于江湖)
- 章节名:第7章 类与对象
- 页码:第218页
VisualC++程序设计实务入门 第7章笔记 一. 类与对象(关键字是class,跟C语言中的结构体很像) 1. 类成员包括变量和函数 成员变量常被称为类的属性 成员函数常被称为类的方法 2. 函数的主代码(即函数的具体实现)即可以直接放在类中,也可以放在类外。 对象是类的一个实例,相当于结构体定义与一个具体结构体变量 若放在类外,写法为 返回值 类名:: 函数名(参数1, 参数2, ...) { } 在类成员函数中,可以直接引用此类的其他所有成员(变量和函数),而不用添加类作用域,就像访问C函数内的局部变量一样。 另外,类名前没有class。 3. 类成员分为三种集合 private protect public 如果一类定义的时候,不指定各个成员的结合,默认都为private 类的对象只能访问public集合中的成员。private和protect中的成员都是类对象不能访问的。这种设计使得类具有一定的封装性。 4. 构造函数与析构函数 因为3中设计存在private集合,因此如果一些变量被放在private中,那么当一个类定义对象时,因为对象不能访问private中的变量,只能通过对象的public中公开的方法来操作对象的private属性,这就带来“变量的初始化问题”,通常我们在类定义对象时需要给对象做初始化。所以为了达到这个目标,引入了类的构造函数,构造函数最主要的作用就是用来初始化类的成员变量(这一句话没问题吧?我个人的理解)。 C++中要求构造函数的名字与类名相同。 #个人吐槽,还不如叫init函数呢。 如果不定义构造函数,C++编译器会默认为此类生成一个不带参数的构造函数 构造函数将在类定义对象时就会运行,比如
#define BOY 1 #define GIRL 0 class person { private: char name[16]; char age; char render; public: void person(char * n, char a, char r) { strncpy(name, n, 16); age = a; render = r; } }; person xiaoming("小明", 15, GIRL);为了简化构造函数的写法,还可以这样写构造函数
person::persion(char *n, char a, char r):age(a), render(n) { memncpy(name, n); }在类的函数声明之后紧跟一个冒号,类成员变量1(构造函数相应参数), 类成员变量2(相应参数)... 上面的例子中定义了一个名为person的类,最后一句不是一句函数调用(C程序员不要误解),这是一句类定义对象语句。 C程序员需要注意,对象定义的过程中,实际上会执行类的构造函数,也就是这个对象的构造函数。 也就是说将类成员变量与构造函数中的相应参数对应起来,C++编译器就会自动将构造函数的参数赋值到类成员变量中。 不过不能直接赋值的语句还需要放置在构造函数内部。比如上面的赋值name使用strncpy实现。就不能放在:号之后。 定义一个类的对象时,对象后面的括号及参数需要与构造函数中各个参数一一对应。 也就是说类对象后面跟的参数会传递给构造函数。 5. 一个类中允许有多个同名的成员函数,这些函数具有不同的参数以及返回值。比如多个同名的构造函数。这也是所谓的重载。 当具有多个同名函数时,我们在引用对象的成员函数时,C++底层会根据我们的填入参数的个数和类型自动的寻找合适的成员函数执行。 6. 既然类具有构造函数,与之对应的就会有析构函数,析构函数名为 ~类名,即类名前加~号,析构函数将在类对象被删除时自动执行。 7. 动态配置对象 类名 * 对象指针 = new 类名(参数1, 参数2, 参数3..) 8. 对象可以整体赋值,相对于内存整体拷贝。
prife对本书的所有笔记 · · · · · ·
-
第218页 第7章 类与对象
-
第250页 第8章 继承与类派生
---------------------------------------------------------------------- 第8章 继承与类派...
-
第345页 10-3-1 利用构造函数进行类型转换
#include <iostream> #include <string> using namespace std; class NAME { pri...
说明 · · · · · ·
表示其中内容是对原文的摘抄