C++(2)

1.用来初始化枚是一个常量表达式。 enum 都定唯一的

一定编译器就要保证值不能

2.每都定了一个接口和一个实现。接口由使用该类的代需要行的操作成。实现一般包括该类所需要的数据。

 

3.编程新手常会忘记类后面的分号,是个很普遍的错误

 

4.C++ 支持另一个关键 struct,它也可以定义类类型。

 

class struct 关键字定义类的唯一差在于默认访问级别:默情况下,struct 的成员为 public,而 class 的成员为 private

 

5.对文件不应该含有定义这规则,有三个例外。文件可以定义类编译时就已知道的 const 象和 inline 函数

 

6.内函数,将 shorterString 写成函数有一个潜在的缺点:用函数比求解等价表达式要慢得多。在大多数的机器上,用函数都要做很多工作;用前要先保存寄存器,并在返回参;程序须转向一个新位置行。

 

 

 

inline 函数放入文件,因inline 函数的对编译而言必是可的,以便编译器能用点内开该函数的代。此有函数原型是不的。而且,内函数本身是不被分配内存的。只有展的地方才分配内存,所以可以多次定

编译与链接

 

 

7.预处理器用指定的文件的内容替代 #include

8.当 string 象和字符串字面混合接操作+ 操作符的左右操作数必至少有一个是 string 型的:

string st1, st2 = "The expense of spirit";
     st1 = st2; // replace st1 by a copy of st2

它必先把 st1 占用的相内存掉,然后再分配 st2 存放 st2 副本的内存空,最后把 st2 中的所有字符到新分配的内存空然后,再将s1指向s2副本。想一想,为什么不直接将s2中的字符直接复制s1中。因为不知道s2到底有多大。

操作可用作左
for (string::size_type ix = 0; ix != str.size(); ++ix)
         str[ix] = '*';
 
和字符串字面
string s5 = s1 + ", " + "world"; // ok: each + has string operand
string s6 = "hello" + ", " + s2; // error: can't add string literals
 

9.vector 不是数据型,而只一个模板,可用来定任意多数据型。vector 型的都指定了其保存元素的型。因此,vector<int> vector<string> 数据型。

vector<int> ivec1;           // ivec1 holds objects of type int
     vector<int> ivec2(ivec1);    // ok: copy elements of ivec1 into ivec2
     vector<string> svec(ivec1);  // error: svec holds strings, not ints
一些有自定构造函数但没有默构造函数的,在初始化这种类型的 vector ,程序就不能提供元素个数,需要提供元素初始

vector 象(以及其他容器象)的重要属性就在于可以在运行高效地添加元素。因 vector 的效率高,在元素已知的情况下,最好是动态地添加元素。

 
函数 size 返回相 vector size_type

使用 size_type ,必指出该类型是在哪里定的。vector 是包括 vector 的元素型:

 vector<int>::size_type        // ok

 vector::size_type            // error

 

 

for (vector<int>::size_type ix = 0; ix != ivec.size()/*动态增长*/; ++ix)
         ivec[ix] = 0;
A.重要求

两个重的形参数量和型不能完全相同

B.为么类的定以分号class Sales_item { /* ... */ } accum, trans;

c.定一个类时,也就是定了一个型。一旦定,就可以定义该类型的象。定义对,将其分配存,但(一般而言)定义类行存分配

 

可以声明一个类而不定义它:

class Screen; // declaration of the Screen class

 
因为,类定义但不分配内存,所以可以在多个cpp文件中定义,但不能在同一个cpp中多次定义。也可以看出编译是每个文件独立编译的。链接时才统一到一起。
 
只有当在前面出现过,数据成才能被指定为该类类型。如果该类型是不完全型,那数据成只能是指向该类类型的或引用
class LinkScreen {
         Screen window;
         LinkScreen *next;
         LinkScreen *prev;
     };
Class screen;
Screen *s;
 
 
D.Const 成员函数。

const 象、指向 const 象的指或引用只能用于用其 const 函数,如果尝试用它用非 const 函数错误的。

 

在普通的非 const 函数中,this 型是一个指向类类型的 const 4.2.5 )。可以改 this 所指向的,但不能改 this 所保存的地址。在 const 函数中,this 型是一个指向 const 类类象的 const 。既不能改 this 所指向的象,也不能改 this 所保存的地址。

 

不要把 const_iterator 象与 const  iterator 象混淆起来。声明一个 const 迭代器,必初始化迭代器。一旦被初始化后,就不能改它的

     vector<int> nums(10);  // nums is nonconst
     const vector<int>::iterator cit = nums.begin();
     *cit = 1;               // ok: cit can change its underlying element
     ++cit;                  // error: can't change the value of cit
 
 
E.没有所有元素都是引用的数
 
F.非 const 量以及要到运行段才知道其const 量都不能用于定数。
// both buf_size and max_files are const
          const unsigned buf_size = 512, max_files = 20;
          int staff_size = 27;            // nonconst
          const unsigned sz = get_size();  // const value not known until run time
          char input_buffer[buf_size];     // ok: const variable
          string fileTable[max_files + 1]; // ok: constant expression
          double salaries[staff_size];     // error: non const variable
          int test_scores[get_size()];     // error: non const expression
          int vals[sz];                    // error: size not known until run time
 
 
const char ch3[6] = "Daniel"; // error: Daniel is 7 elements
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值