摘要:C++复制构造函数、=运算符重载 #include<iostream> using namespace std; class base{ private: int x,y; public: base():x(2),y(4) {cout << "base default constructor" <<
阅读全文
摘要:open() fstreamifstreamofstream 打开指定文件,使其与文件流对象相关联。 is_open() 检查指定文件是否已打开。 close() 关闭文件,切断和文件流对象的关联。 swap() 交换 2 个文件流对象。 operator>> fstreamifstream 重载
阅读全文
摘要:先定义point类,再定义由point类的动态数组 #include <iostream> #include <cassert> using namespace std; class Point { private: int x, y; public: Point() : x(0), y(0) {c
阅读全文
摘要:复试C++看程序写结果 易错 #include <iostream> using namespace std; void function(char *& s1, char *& s2){ int i = 0; for(; *s1 != *s2; s1++, s2++) i++; //当两个指针同时
阅读全文
摘要:C++类继承与类组合,默认与含参的构造先后顺序 易错 这道题原本是没有那么多输出信息的,是我自己加上了调用什么函数的提示。 一开始以为就输出两行,一行是构造父类时A:5,一行是构造子类时x=5,A::x=5。 #include "bits/stdc++.h" using namespace std;
阅读全文
摘要:考察前置++运算符设置为友元函数,这题的坑在于,返回值是不是对象的引用,形参也不是对象的引用,导致自增离开了作用域以后就不在有任何效果。 #include <iostream> using namespace std; class C{ private: int xx,yy; public: C(i
阅读全文
摘要:输入一行文本,按照相应格式输出每个单词的长度 #include <iostream> using namespace std; #include <string> #include <vector> #include <iomanip> int main(){ string sen = " qwe
阅读全文
摘要:复试C++15真题_程序设计4_查找字符串并替换 编写findRepStr函数,功能为在字符串str中寻找目的字符串findStr,并用replaceStr字符串替换,最后输出替换后的字符串str 我不知道可不可以用string,于是我用了字符数组,用暴力匹配寻找字符串。 #include <ios
阅读全文
摘要:编写一个递归函数,功能为:输入一个字符串,输出一个整数值。例如输入 "1a2xcz3 4 ,5a!6" , 输出654321。 一开始想不明白怎么写递归,于是我写了迭代的函数。意识到,递归的过程就是实现了迭代的循环,而循环内的操作本质没有太大差别。于是就写出来了: #include <iostrea
阅读全文
摘要:复试C++14真题 看程序写结果5 虚函数、继承 #include <iostream> using namespace std; class A{ public: virtual void print() {cout<<"A::print"<<endl;} //void print() {cout
阅读全文
摘要:substr(start , lenth) erase(start , lenth) assign(v.begin() , v.end()) vl(a+i , a+j) 相当于用a[i] 到 a[j-1] 的元素初始化v1 , 包括a[j-1] stod函数用法 stoi函数用法 #include
阅读全文
摘要:C++看程序写结果:调用一次Line类构造函数,执行几次Point类复制构造函数? #include <iostream> #include <cmath> using namespace std; class Point { //Point类定义 public: Point(int xx = 0,
阅读全文
摘要:看程序写结果,含有内嵌对象的类的构造函数调用次序 #include <iostream> using namespace std; class Student1{ public: Student1() {cout << "Student1+" << endl; } ~Student1() { cou
阅读全文
摘要:输入一个数字n表示层数,在输入数字来表示三角形,要求三角形求解从顶到低的最长路径。 7 4 2 1 6 0 2 4 7 5 2 4 6 7 5 从第一层的 7 出发,走到第五层,求出经过路径和最长的路径和。要求使用递归与递推两种方法,并且按照下面的输入与输出设计程序。从上一层向下一层走的时候,只能走
阅读全文
摘要:C++ 模板 类模板中可以定义静态成员,从该类模板实例化得到的所有类都包含同样的静态成员。程序示例如下: #include <iostream> using namespace std; template <class T> class A { private: static int count;
阅读全文
摘要:C++ 模板 下面分四种情况分别讨论。 1. 函数、类、类的成员函数作为类模板的友元 函数、类、类的成员函数都可以作为类模板的友元。程序示例如下: void Func1() { } class A { }; class B { public: void Func() { } }; template
阅读全文
摘要:C++ 模板 类模板和类模板之间、类模板和类之间可以互相继承。它们之间的派生关系有以下四种情况。 1. 类模板从类模板派生 示例程序: template <class T1, class T2> class A { Tl v1; T2 v2; }; template <class T1, class
阅读全文
摘要:C++ 模板 前面讲到的模板的实例化是在调用函数或者创建对象时由编译器自动完成的,不需要程序员引导,因此称为隐式实例化。相对应的,我们也可以通过代码明确地告诉编译器需要针对哪个类型进行实例化,这称为显式实例化。编译器在实例化的过程中需要知道模板的所有细节:对于函数模板,也就是函数定义;对于类模板,需
阅读全文
摘要:C++ 模板 在将函数应用于多文件编程时,我们通常是将函数定义放在源文件(.cpp文件)中,将函数声明放在头文件(.h文件)中,使用函数时引入(#include命令)对应的头文件即可。编译是针对单个源文件的,只要有函数声明,编译器就能知道函数调用是否正确;而将函数调用和函数定义对应起来的过程,可以延
阅读全文
摘要:C++ 模板 模板并不是真正的函数或类,它仅仅是编译器用来生成函数或类的一张“图纸”。模板不会占用内存,最终生成的函数或者类才会占用内存。由模板生成函数或类的过程叫做模板的实例化,相应地,针对某个类型生成的特定版本的函数或类叫做模板的一个实例。在学习模板以前,如果想针对不同的类型使用相同的算法,就必
阅读全文
摘要:C++ 模板 模板是一种泛型技术,目的是将数据的类型参数化,以增强 C++ 语言(强类型语言)的灵活性。C++ 对模板的支持非常自由,模板中除了可以包含类型参数,还可以包含非类型参数,例如: template<typename T, int N> class Demo{ }; template<cl
阅读全文
摘要:模板特化与unsigned char #include <iostream> using namespace std; template <typename T> void print(T t){ cout << "The value is " << t << endl; } template<>
阅读全文
摘要:C++ 模板 C++ 没有办法限制类型参数的范围,我们可以使用任意一种类型来实例化模板。但是模板中的语句(函数体或者类体)不一定就能适应所有的类型,可能会有个别的类型没有意义,或者会导致语法错误。例如有下面的函数模板,它用来获取两个变量中较大的一个: template<class T> const
阅读全文
摘要:C++ 模板 在使用类模板创建对象时,程序员需要显式的指明实参(也就是具体的类型)。例如对于下面的 Point 类: template<typename T1, typename T2> class Point; 我们可以在栈上创建对象,也可以在堆上创建对象: Point<int, int> p1(
阅读全文
摘要:C++模板 当需要对不同的类型使用同一种算法(同一个函数体)时,为了避免定义多个功能重复的函数,可以使用模板。然而,并非所有的类型都使用同一种算法,有些特定的类型需要单独处理,为了满足这种需求,C++ 允许对函数模板进行重载,程序员可以像重载常规函数那样重载模板定义。 我们定义了 Swap() 函数
阅读全文
摘要:在C++中,不能声明虚构造函数,但是可以声明虚析构函数。语法为 virtual ~类名(); 如果一个类的析构函数是虚函数,那么,由它派生而来的所有子类的析构函数也是虚函数。析构函数设置为虚函数之后,在使用指针引用时可以动态绑定,实现运行时的多态,保证使用基类类型的指针就能够调用适当的析构函数针对不
阅读全文
摘要:在C++中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) = 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。 最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。 包含纯虚函数的
阅读全文
摘要:C++多态和虚函数 #include <iostream> using namespace std; //基类People class People{ public: People(char *name, int age); void display(); protected: char *m_na
阅读全文
摘要:数据类型转换的前提是,编译器知道如何对数据进行取舍 类其实也是一种数据类型,也可以发生数据类型转换,不过这种转换只有在基类和派生类之间才有意义,并且只能将派生类赋值给基类,包括将派生类对象赋值给基类对象、将派生类指针赋值给基类指针、将派生类引用赋值给基类引用,这在 C++ 中称为向上转型。相应地,将
阅读全文
摘要:虚继承(Virtual Inheritance) 为了解决多继承时的命名冲突和冗余数据问题,c++提出了虚继承,使得在派生类中只保留一份间接基类的成员。 在继承方式前面加上 virtual 关键字就是虚继承 虚继承的目的是让某个类做出声明,承诺愿意共享它的基类。其中,这个被共享的基类就称为虚基类(V
阅读全文
摘要:代码 #include <iostream> using namespace std; class BaseClass{ public: void fn1(); void fn2(); }; void BaseClass::fn1(){ cout << "调用基类的函数 fn1()" << endl
阅读全文
摘要:虚函数、构造、析构、初始化列表 #include <iostream> using namespace std; class Base{ public: Base(const char* p_szName):m_szName(p_szName) {cout << "Base类构造:" << m_sz
阅读全文
摘要:郑莉cpp习题6-22 用递归算法翻转字符串s #include <iostream> using namespace std; #include <string> void reverse(string &s,int left,int right){ char t; if(left < right
阅读全文
摘要:常量指针与指针常量 const int *p1; //常量指针,从后往前可以理解为:p1 is a pointer point to const int 常量指针:声明了一个指向整型常量的指针p1,不能通过这个指针p1去修改所指向变量的值。但是可以修改指针p1的指向,即指针p1可以指向别的同类型变量
阅读全文
摘要:浅层复制与深层复制 浅层复制并没有形成真正的副本,存在两个对象共用同一块内存空间而导致执行析构函数时,该空间被两次释放,导致运行错误。 深层复制则实现,复制之后,两个对象不互相影响。 #include <iostream> using namespace std; #include <cassert
阅读全文
摘要:有三种方法 1.声明一个返回数组指针的函数 int (*func(int i)) [10]; func(int i) 表示调用func函数所需要一个int类型的实参。(*func(int i)) 意味着我们可以对函数调用的结果执行解引操作。 //意思就是函数调用的结果的是个指针。(*func(int
阅读全文
摘要:子类包含父类成员的构造与析构顺序 #include <iostream> using namespace std; class F1{ public: F1() {cout << "F1 构造函数" << endl;} ~F1() {cout << "F1 析构函数" << endl;} }; cl
阅读全文
摘要:就算每一个case后面都没有break , throw相当于起了break的作用? #include <iostream> #include <stdexcept> using namespace std; class ErrorA: public runtime_error{ public: Er
阅读全文
摘要:leetcode120. 三角形最小路径和 这道题的关键在于想到 dp[i][j] = min(dp[i-1][j-1] , dp[i-1][j]) + triangle[i][j]; 太久没做过算法题了,连设一个dp数组都没意识到 我的代码 class Solution { public: int
阅读全文
摘要:C++异常处理 #include <iostream> #include <string> using namespace std; class MyException { public: MyException(const string &message):message(message){} ~
阅读全文
摘要:实例 #include <iostream> using namespace std; class Base1 {//基类Base1,构造函数有参数 public: Base1(int i) { cout << "Constructing Base1 " <<i<< endl; } ~Base1()
阅读全文
摘要:#include <iostream> using namespace std; class A1{ public: void show1() { cout << "class A1" << endl; } }; class A2 : public A1{ void show2() { cout <
阅读全文
摘要:#include <cstddef> #include <iostream> using namespace std; int main() { int arr[6] = { 0 , 1 , 2 , 3 , 4 , 5 }; int* ptr = arr; int len = sizeof(arr)
阅读全文
摘要:c++在类外是不能直接调用私有成员函数的,比如 #include <iostream> using namespace std; class A3 { void show3() { cout << "class A3"<< endl; //注意,类内部默认是私有 } }; int main() {
阅读全文
摘要:C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。 C++ 标准模板库的核心包括以下三个组件: 组件描述 容器(Containers) 容器是用来管理某一类对象的集合。C++ 提供了
阅读全文
摘要:C++ 模板 C++模板和泛型程序设计 数据的值可以通过函数参数传递,在函数定义时数据的值是未知的,只有等到函数调用时接收了实参才能确定其值。这就是值的参数化。在C++中,数据的类型也可以通过参数来传递,在函数定义时可以不指明具体的数据类型,当发生函数调用时,编译器可以根据传入的实参自动推断数据类型
阅读全文
摘要:在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。 因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用
阅读全文
摘要:C++ 动态内存 C++ 程序中的内存分为两个部分: 栈:在函数内部声明的所有变量都将占用栈内存。 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。 很多时候,您无法提前预知需要多少内存来存储某个定义变量中的特定信息,所需内存的大小需要在运行时才能确定。 在 C++ 中,您可以使用特殊的
阅读全文
摘要:菜鸟教程 C语言中文网 程序的错误大致可以分为三种,分别是语法错误、逻辑错误和运行时错误:1) 语法错误在编译和链接阶段就能发现,只有 100% 符合语法规则的代码才能生成可执行程序。语法错误是最容易发现、最容易定位、最容易排除的错误,程序员最不需要担心的就是这种错误。2) 逻辑错误是说我们编写的代
阅读全文
摘要:接口描述了类的行为和功能,而不需要完成类的特定实现。 C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来指定的 class Box {
阅读全文
摘要:下标操作符 [] 通常用于访问数组元素。重载该运算符用于增强操作 C++ 数组的功能。 1 #include <iostream> 2 using namespace std; 3 const int SIZE = 10; 4 class safearay 5 { 6 private: 7 int
阅读全文
摘要:函数调用运算符 () 可以被重载用于类的对象。当重载 () 时,您不是创造了一种新的调用函数的方式,相反地,这是创建一个可以传递任意数目参数的运算符函数。 1 #include <iostream> 2 using namespace std; 3 class Distance 4 { 5 priv
阅读全文
摘要:C++ 拷贝构造函数(初学有点难理解) 就像其他运算符一样,可以重载赋值运算符( = ),用于创建一个对象,比如拷贝构造函数。 1 #include <iostream> 2 using namespace std; 3 class Distance 4 { 5 private: 6 int fee
阅读全文
摘要:原文 递增运算符( ++ )和递减运算符( -- )是 C++ 语言中两个重要的一元运算符。 1、递增和递减一般是改变对象的状态,所以一般是重载为成员函数。 2、重载递增递减,一定要和指针的递增递减区分开。因为这里的重载操作的是对象,而不是指针(由于指针是内置类型,指针的递增递减是无法重载的),所以
阅读全文
摘要:原文 多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。 C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 1 #include <iostream> 2 using namespace std; 3 class Shape
阅读全文
摘要:C++ 能够使用流提取运算符 >> 和流插入运算符 << 来输入和输出内置的数据类型。您可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型。 在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数。 下面的实例演示了如何重载提取运算符
阅读全文
摘要:C++ 语言支持各种关系运算符( < 、 > 、 <= 、 >= 、 == 等等),它们可用于比较 C++ 内置的数据类型。 您可以重载任何一个关系运算符,重载后的关系运算符可用于比较类的对象。 1 #include <iostream> 2 using namespace std; 3 4 cla
阅读全文
摘要:一元运算符只对一个操作数进行操作,下面是一元运算符的实例: 递增运算符( ++ )和递减运算符( -- ) 一元减运算符,即负号( - ) 逻辑非运算符( ! ) 一元运算符通常出现在它们所操作的对象的左边,比如 !obj、-obj 和 ++obj,但有时它们也可以作为后缀,比如 obj++ 或 o
阅读全文
摘要:C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较
阅读全文
摘要:1 // 基类 2 class Animal { 3 // eat() 函数 4 // sleep() 函数 5 }; 6 7 8 //派生类 9 class Dog : public Animal { 10 // bark() 函数 11 }; 基类 & 派生类 一个类可以派生自多个类,这意味着,
阅读全文
摘要:原文 可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。 静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义
阅读全文
摘要:原文 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,在使用指针之前,对指针进行初始化。 在 C++ 中,指向类的指针指向一个类的对象,与普通的指针相似,指向类的指针可以用于访问对象的成员变量和成员函
阅读全文
摘要:类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。
阅读全文
摘要:拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为参数传递给函数。 复制对象,并从函数返回这个对象。 如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果
阅读全文
摘要:带参数的构造函数 默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值,如下面的例子所示: 1 #include <iostream> 2 using namespace std; 3 4 class Line 5 { 6 public: 7 void
阅读全文
摘要:私有(private)成员 成员和类的默认访问修饰符是 private,如果没有使用任何访问修饰符,类的成员将被假定为私有成员。私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。 实际操作中,我们一般会在私有区域定义数据,在公有区域定义相关的函数,以便在类
阅读全文
摘要:关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。 如下风格的函数 Foo 不能成为内联函数: inline void Foo(int x, int y); // inline 仅与函数声明放在一起 void Foo(int x, in
阅读全文
摘要:通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护。C++ 函数可以返回一个引用,方式与返回一个指针类似。 当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。例如,请看下面这个简单的程序: 1 #include <iostream> 2 3 using
阅读全文
摘要:1 #include <iostream> 2 using namespace std; 3 4 // 函数声明 5 void swap(int& x, int& y); 6 7 int main () 8 { 9 // 局部变量声明 10 int a = 100; 11 int b = 200;
阅读全文
摘要:C++ 允许从函数返回指针,必须声明一个返回指针的函数: int * myFunction() C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static变量。 1 #include <iostream> 2 #include <ctime> 3 #include <cstdlib>
阅读全文
摘要:指针和数组并不是完全互换的 1 #include <iostream> 2 3 using namespace std; 4 const int MAX = 3; 5 6 int main () 7 { 8 int var[MAX] = {10, 100, 200}; 9 10 for (int i
阅读全文
摘要:1 #include <iostream> 2 3 // 函数声明 4 void func(void); 5 6 int main() 7 { 8 int count=10; 9 while(count--) 10 { 11 func(); 12 std::cout << ",变量 count 为
阅读全文