C++Primer #7 类】的更多相关文章

C++ 与"类"有关的注意事项总结(一) 1. 除了静态 static 数据成员外,数据成员不能在类体中被显式地初始化. 例如 : class First { int memi = 0; // 错误 double memd = 0.0; // 错误 }; 类的数据成员通过类的构造函数进行初始化. 2. 我们可以声明一个类但是并不定义它. 例如: class Screen; // Screen 类的声明 这个声明向程序引入了一个名字 Screen,指示 Screen为一个类类型. 但是我…
我们在创建类的对象时,类不应该仅仅被声明,还应该被定义过,否则无法知道类占用了多少的内存 但是如果一个类的名字已经出现过就被认为是已经声明过了,所以允许包含自己的指针或者引用. 默认构造函数: 当类中包含一个其他类的成员且它没有默认构造函数,那个编译器无法为当前类合成默认构造函数. 如果不支持内类初始值,那么所有构造函数都应显式的初始化每个内置类型成员 使用vector或string能避免分配.释放内存带来的复杂性 struct和class唯一的区别就是默认访问权限,struct(public)…
1.当我们初始化一个成员指针或为成员指针赋值时,该指针并没有指向任何数据.成员指针指定了成员而非成员所属的对象,只有当解引用成员指针时,我们才提供对象信息. 2.和普通的函数指针类似,如果成员存在重载的问题,则我们必须显示地声明函数类型以明确指出我们想要使用的是哪个函数.和使用指向数据成员的指针一样,我们使用 .* 或者 ->*运算符作用于指向成员函数的指针. class test { public: void Add(int){} void Add(long){} void get() {}…
1.定义在类内部的函数是隐式的inline函数. 2.因为this的目的总是指向“这个”对象,所以this是一个常量指针,我们不允许改变this中保存的地址. 3.常量成员函数:允许把const关键字放在成员函数的参数列表之后,此时紧跟在参数列表后面的const表示this是一个指向常量的指针.因为this是指向常量的指针,所以常量成员函数不能改变调用它的对象的内容. 4.常量对象,以及常量对象的引用或指针都只能调用常量成员函数. 5.编译器分两步处理类:首先编译成员的声明,然后才轮到成员函数体…
类的定义 简单的来说类就是数据和它的操作的一种封装,内部提供接口函数 类的成员函数的声明必须在类的内部,而它的定义则既可以放在类的内部也可以放在类的外部.(一般在类内进行声明,类外实现函数定义) 定义在类内部的函数是隐式的inline函数(内联函数). 构造函数 功能:初始化类对象的数据成员.无论何时只要类的对象被创建,就会执行构造函数. 特点:构造函数的名字和类的名字相同.类可以包含有多个构造函数(类似重载函数).不同于其他成员函数,构造函数不能被声明为const,且没有返回类型. 默认构造函…
参考资料 1. C++Primer #7 类 Sales_data类 Sales_data.h #include<iostream> #include<string> class Sales_data { friend std::istream& operator >> (std::istream&, Sales_data&); friend std::ostream& operator << (std::ostream&am…
看到(C++ Primer)类的成员函数这里,突然对成员函数形参列表后面的const感到迷惑. 因为书中开始说是修饰隐含形参this的,然后又说是声明该函数是只读的. 大为不解! 翻资料.找人讨论... 最终恍然大悟: 还是书里说的对,那个const 修饰的是隐参this(const ClassName *const this),而this指向调用该函数的对象,所以不能通过this修改对象的内容. 既然不能修改对象的内容,那就不能调用其它非const this 的函数--因为可能会修改内容. -…
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特征. 继承 如果用.Net写一个A类继承B类的话,写法会是大致如下: Public Class A : B{ ....... } Java的话却要通过extends关键字在声明类的时候指定其父类(基类),所以上面的.Net写法要转换成Java的话应该是下面的样子: Public clas A ext…
动态存储类 StrVec Class Design StrVec Class Definition class StrVec { public: //构造函数 StrVec():elements(nullptr), first_free(nullptr), cap(nullptr){} //用initializer_list<string>初始化參数列表 StrVec(initializer_list<string> il):StrVec(il){} //拷贝构造函数 StrVec…
在C++primer 第4版的 15章 15.2.5中有以下这样一段提示: "注解:派生类能够恢复继承成员的訪问级别,但不能使訪问级别比基类中原来指定的更严格或者更宽松." 在vs2010中经过验证.这段话是错误的.详细见下面代码: //Base.h #pragma once #include <iostream> using namespace std; class Base { public: Base(void); ~Base(void); size_t size()…