随笔分类 - C/C++ Programming
摘要:1. using 关键字 使用 using 关键字,可以将父类中被隐藏的函数暴露在子类中,但是需要注意的是,在相同情况下,子类函数的优先级更高。 2. 继承构造函数(C++11) 在c++11之前,构造函数、析构函数、赋值操作符,这些都不能被继承。但是,C++11允许我们使用 using 关键字来继承基类的构造函数。 示例1 示例2 3. 重写方法时的特殊情况 1)...
阅读全文
摘要:修改重写方法的特征 在大多数情况下,我们重写(override)一个 virtual 方法是为了改变它的实现。然后,有时我们却想改变该 virtual 方法的其他的特征,这往往会带来一系列问题。 1)改变方法的返回值类型 通常,子类在重写方法时,要保持与父类一致的函数原型,方法的实现可以改变,但是原型需要保持不变。 然而,事实却并非如此。在C++中,如果父类的 virtual 方法的返回值...
阅读全文
摘要:多重继承常常被认为是 OOP 中一种复杂且不必要的部分。多重继承面临 crash 的场景并非难以想象,来看下面的例子。 1. 名称冲突 来看以下情况: 如果 Dog 类以及 Bird 类都有一个名为 eat() 的方法,而子类又没有 override 该方法。如果此时调用子类的 eat() 方法,编译器就会报错,指出 eat() 的调用有歧义(不知道是调用从 Dog 类继承而来的 eat...
阅读全文
摘要:new & delete expression1. IntroductionA new expression allocates and constructs an object of a specified type.A new[] expression allocates and constru...
阅读全文
摘要:OOP之类和对象 1. this指针的引入 每个成员函数都有一个额外的隐含的形参,这个参数就是this指针,它指向调用对象的地址。默认情况下,this的类型是指向类类型非常量版本的常量指针。可以表示成如下伪代码形式: /* 假设现在有一个类Sales_data,以及其非常量Sales_data类型...
阅读全文
摘要:fundamental integral types or extended integral types 我们先通过下图,来了解可以跨平台使用的整数类型: 之所以我们需要以上各种明确指定宽度的int类型是因为int类型本身比较特殊,其具体的字节数同机器字长和编译器有关(标准并没有规定其具体所占的字节数)。 因此如果要保证移植性,我们应该尽量使用上图中带宽度的int类型。这种数据类型在所有平台下都...
阅读全文
摘要:引言 在C++中,POD是一个极其重要的概念。要理解POD类型,我们首先需要理解Aggregate类型。下文结合stackoverflow上的高票回答将对Aggregate类型做一个全面的解读。 对于Aggragates的定义 C++标准(C++ 03 8.5.1 §1)中的正式定义如下: An aggregate is an array or a class (clause 9) with n...
阅读全文
摘要:1. 默认初始化 如果定义变量时没有指定初值,则变量会被默认初始化,此时变量被赋予了“默认值”。 对于类类型的变量来说,初始化都是依靠构造函数来完成的。因此,即使定义某个类的变量(对象)时没有提供初始化式,我们也能通过类的默认构造函数来完成初始化。即,“默认值”由默认构造函数来决定(前提是该类有默认构造函数)。 对于内置类型的变量来说,当定义没有初始化式的变量时,系统有时会帮我们初始化变量。“默认...
阅读全文
摘要:1 基于文件指针的数据读写基于文件指针的数据读写,通常为标准函数,在Windows与Linux下,均可以使用。数据块读写NAME fread, fwrite - binary stream input/outputSYNOPSIS #include size_t...
阅读全文
摘要:int ch;while( (ch = getchar()) != EOF ){ putchar(ch);}执行程序,输入:we are the,然后回车。运行结果如下:[purple@localhost 0822]$ ./a.outwe are thewe are the注意光标位置是在最后一行空白行上,以及getchar是接收空格以及\n的。即执行程序,输入:we are the,然后回...
阅读全文

浙公网安备 33010602011771号