随笔分类 - C++ primer plus 学习记录
一边学习一边总结的 C++ 知识点。
摘要:——C++允许类对象赋值,这是通过自动为类重载赋值运算符实现的,原型如下: Class_name & Class_name_name::operator=(const Class_name &); 何时使用: 将已有的对象赋给另一个对象时,将使用重载的赋值运算符,初始化对象时,并不一定会使用赋值运算
阅读全文
摘要:——复制构造函数用于将一个对象的值复制到新创建的对象中,用于初始化过程中(包括按值传递参数),而不是常规的赋值过程中 原型: Class_name(const Class_name &) 何时调用: 新建一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用 StringBad ditto(m
阅读全文
摘要:——类的所有对象共同一个静态数据成员,只创建一个静态数据成员副本 class StringBad { private: char *str; int len; static int num_strings; // 声明静态数据成员 public: ... }; 静态数据成员在类声明中声明 int S
阅读全文
摘要:第一: 唯一匹配,无二义性(优先于自动转换) 第二: 无匹配且定义了自动转换,可只定义一种转换或使用explicit强制显示转换,从而避免隐式转换造成的二义性错误
阅读全文
摘要:——有时转换函数更搭配友元函数、有时多余的转换函数会干扰友元函数的运行 Stonewt operator + (const Stonewt &st1, cosnt Stonewt &st2) { double pds = st1.pounds + st2.pounds; Stonewt sum(pd
阅读全文
摘要:——C++不自动转换不兼容的类型,允许用户自定义类类型的自动和强制转换 其它类型转成类: 只接受一个参数的构造函数可作为转换函数(若其它参数都有默认值,则也符合情况) class Stonewt { private: ... public: Stonewt (double lbs); {...} /
阅读全文
摘要:——rand()函数将一种算法用于一个初始种子(固定不变)来获得随机数,该随机数将用作下次函数调用的种子。 srand(time(0)); 头文件cstdlib包含srand()和rand()的原型,ctime包含time()的原型 srand()允许覆盖默认的种子值 time(0)返回当前时间(某
阅读全文
摘要:——能够访问类的私有成员的非成员函数 创建友元: 将其原型放在类声明中,并在原型声明前加上关键字friend friend Time operator *(double m, const Time &t); // goes in class declaration operator*()函数不是成员
阅读全文
摘要:——运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。C++允许将运算符扩展到用户自定义的类型(如:类对象的相加) 使用运算符函数: returntype operator op ( argument-list ); 例如classtype operator *(int a)、cl
阅读全文
摘要:cos、sin参数是度数,而atan、atan2参数返回弧度
阅读全文
摘要:——可用于存储多种数据类型数据,但只能同时存储其中一种的一个值 union one4all { int int_val; long long_val; double double_val; }; one4all pail; pail.int_val = 15; // store an int cou
阅读全文
摘要:——传统的枚举存在一些问题,其中之一是两个枚举类型定义中的枚举量可能发生冲突。 enum egg {Small, Medium, Large, Jumbo}; enum t_shirt {Small, Medium, Large, Xlarge}; 这将无法通过编译(egg Small和t_shir
阅读全文
摘要:有时,使符号常量的作用域为类很有用: class Bakery { private: const int Months = 12; // declare a constant? FALSE double costs[Months]; ... 但这是行不通的,因为——声明类只是描述了对象的形式,并没有
阅读全文
摘要:——C++类引入了一种新的作用域:类作用域 在类中定义的名称(如类数据成员名和类成员函数名)的作用域都为整个类,作用域为整个类的名称只在该类中是已知的,在类外是不可知的。 使用名称: 在类声明或成员函数定义中,可以使用未修饰的成员的名称(限定的名称即不加作用域解析运算符) 构造函数在被调用时才能被识
阅读全文
摘要:——顾名思义,创建存储对象的数组 Stock mystuff[4]; // creates an array of 4 Stock objects 上述声明要求,这个类要么没有显示地定义任何构造函数,要么定义了一个显示默认构造函数 const int STK = 4; Stock stocks[ST
阅读全文
摘要:——this指针指向用来调用成员函数的对象(this被作为隐藏参数传递给方法,即直接在成员函数中使用而无需声明) 它是地址: this是对象的地址,而对象本身是*this 用this访问成员: 使用->运算符,通过指针来访问结构成员。这也同样使用于类成员
阅读全文
摘要:——调用对象被视为只读对象,保证成员函数无法修改它 方法: 将const关键字放在函数的括号后面: void show() const; // promises not to change invoking object void stock::show() const // 函数定义也应该使用co
阅读全文
摘要:——设置对象的值既可以通过初始化,也可以采用赋值的方式 利用构造函数创建临时对象进行赋值: Stock stock; // 声明一个Stock对象 ... stock = Stock("Boffo Objects", 2, 2.0); // 对stock重新赋值(或可以理解为初始化) 调用构造函数来
阅读全文
摘要:——用构造函数创建对象后,程序负责跟踪该对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数—析构函数完成清理工作,如释放构造函数使用new分配的内存。 析构函数的形式: 在类名前加上~,没有返回值和声明类型,没有参数: ~Stock(); 调用: 对于被声明为自动变量的类对象,过期时
阅读全文
浙公网安备 33010602011771号