c++笔记

来源:互联网 发布:淘宝联盟佣金结算规则 编辑:程序博客网 时间:2024/06/05 11:24
1 构造函数 :声明该类对象是,构造函数将被自动调用。


先声明 后调用构造函数。
Dateofyear date1(7,4)  ,date2(5,5)


相当于
Dateofyear  date1;
Dateofyear date2;
date1.Dateofday(7,4);
date2.Dateofday(5,5);


2 构造函数显示调用:
构造函数也可以在对象已经声明过后再次调用.
显示调用构造函数来构造一个匿名对象,用来存储一个新值。
匿名对象就是指没有用任何变量来命名的对象。
holiday=DayofYear(5,5);


3 成员函数不修改调用对象值。在函数后加const
void output() const;


4 内联函数:在类定义中给出成员函数的完整定义。
在编译时,内联函数的代码将会被直接插入到每个调用该内联函数的地方


5 静态变量: 一个类所有的对象都要共享一个变量。


6 向量:
capacity() 获取向量的容量。其为这些元素所分配的内存空间大小。
向量的大小指的是向量中所包含的元素个数。


       8章


友元函数:拥有成员函数的一切权利的非成员函数。


自动类型转换:


构造函数的自动类型转换:如果类定义中包含了合适的构造函数,那么系统会自动进行某些类型转换。
所有自动类型的仅仅对第二个参数起作用。
1 fullAmount=baseAmount+25;
+函数的参数是money,而25是int,于是从构造函数中找寻。
构造函数将25转换成money. 如果构造函数中没有将int 转换为money对象的构造函数
则编译器提示错误。


2  如果将加号作为成员操作符重载。
fullAmount=25+baseAmount;
则错误。
因为25不能作为调用对象,money类的构造函数自动类型转换仅仅对参数有用,而对调用对象不适用。
若是非成员函数重载,非成员函数重载可以使所有的参数都能进行自动类型转换。


友元类:
如果将F声明为类c的友元,代码框架为:
class F;//提前声明
class c{
public :
.......
friend class f;


}


c字符串和string


c字符串最后得添加'\0';
c字符串是数组。不能使用赋值和==操作符。
>>操作符 C字符串 按照这种方式输入时,所有的空白符(空格,制表符,以及换行符)都被忽略掉。
'\n' 是一个char,能存储在char中。
"\n"是一个string 不能存储在string.


string类




p1=new int ;
操作符new可以用来产生一个没有使用标识符的变量。这个无名变量可以用指针来引用。
*p1.
通过new操作符产生的变量称为动态变量。因为这种变量是在程序运行时产生和销毁的。
NULL 是整数0;
‘\0’是个字符;
this 指针是一个预定义的指向调用对象的指针。
this并不是调用对象的名字,而是指向调用对象的指针的名字。
this不能改变。始终指向当前调用对象。


重载赋值操作符;
当重载赋值操作符时,必须作为类的成员重载。
默认的复制操作符和默认的构造函数执行的都是浅复制。
不包含指针和动态分配数据,浅复制的结果完全正确。
深复制:独立的副本。




析构函数:
动态分配变量存在一个问题,除非在程序中使用合适的delete语句,否则动态变量是不会自动销毁的。
当函数调用结束时,局部指针会自动销毁,但不使用delete后,该局部指针所指向的动态变量是不会销毁的。


当一个类的对象超出其作用域时,将会自动调用类的析构函数。




复制构造函数:
当函数返回某个类的值时,复制构造函数将会被自动调用。




如果类定义中包含指针成员以及使用new操作符所产生的动态分配内存。就需要自己定义复制构造函数。


封装:
类的详细说明部分和类的具体实现部分分开。
1 所有类的成员变量设置为类的私有成员。
2 将所有类的基本操作作为类的共有成员函数,友元,或者普通函数,或者操作符重载。
将类的定义以及函数和操作符的声明放在一起,这一部分以及相关的注释被称为类的接口部分,应该在
注释中详细说明如何使用这些函数和操作符。
3 实现部分包括函数的定义以及重载操作符的定义。


接口文件都是头文件。
实现文件都是.cpp文件。
包含程序的文件(即包含main函数的文件)常常称为应用程序文件或驱动文件。






#define DTIME_H
#ifndef DTIME_H
#endif
无论程序包含多少次#include "Dtime.h"
 类digitalTime 也只是被定义一次。




名字空间:名字定义的集合。


比如#include<iostream>
该库中所有的名字比如cin和cout之类的名字,都都定义在std命名空间中。
using namespace std;
全局命名空间不需要使用using命名。


流是指字符或者其他数据的流动。
输入流是指数据或字符流向程序。
输出流则是指数据或字符从程序流向别处。




异常:在c++中,异常处理按照下面的方式进行,所写代码和库模块提供一种当异常出现时发出信号的机制,这种称为抛出
一个异常(throw an exception).然后在程序的另一段代码中,处理这个异常情况,及处理异常(handling the exceptioin)
try 模块。
try{
 some code;
   }
之所以称为尝试模块,是因为不能百分百确定代码都能正常执行,只是想尝试下。
catch模块是捕捉异常和处理异常。


void somefunction()throw(DivideByzero, someotherException);
//类型为DivideByZero或someotherexception的异常得到处理,所有其他类型
//的异常处理会调用unexceptied();
void someFunction() throw();
//空的异常列表,所有异常处理是会调用unexceptied().
void someFunction();
//所有类型的异常值都得到正常的处理。






stl:标准模板库
容器类:存储数据的集合.
迭代器:前向迭代器,++操作;
双向迭代器:可以进行++和--操作。
随机迭代器:可对迭代器进行++和--以及随机访问。
常量迭代器:
可变迭代器:


反向迭代器:
slist:单向链表。
list:双向链表。双向迭代器。


容器适配器:在其他模板类基础上实现的模板类。
stack,queue,priority_queue;
优先级队列:是一个带有附加属性的队列,当每个元素加入到该队列时,给定一个优先级。
stack<int,vector<int> > 中间一定要空格。


关联容器:实际上可以看作是一个非常简单的数据库。他们用于存储数据。
每一个数据项都有与之关联的称为关键词(key)的值。
模板类Set的中的元素不会重复出现。
set<T,ordering> s;


映射(map):
映射本质上是按照有序对的集合方式给出的一个函数。对于每一对中的一个值first,在map中最多有一个与之对应的值
second.这两个值就是map中的一个对(first,second).


模板类:
pair<T1,T2>的对象用来存储一对值,这对值中的1第一个元素为T1类型,第二个元素为t2类型。


模式:适配器模式。


模型—视图—控制器模式
是一种将应用程序的i/0任务部分同其他部分分离离开的方法。
其他的模型部分是整个应用程序的核心部分,视图部分是应用程序的输出部分,
用来显示模型状态的图像。而控制器部分则是输入部分。将命令从用户传递到模型中。




2016.7,10号
0 0
原创粉丝点击