走向C之路ppt课件.ppt

上传人:本田雅阁 文档编号:2767852 上传时间:2019-05-12 格式:PPT 页数:29 大小:280.51KB
返回 下载 相关 举报
走向C之路ppt课件.ppt_第1页
第1页 / 共29页
走向C之路ppt课件.ppt_第2页
第2页 / 共29页
走向C之路ppt课件.ppt_第3页
第3页 / 共29页
走向C之路ppt课件.ppt_第4页
第4页 / 共29页
走向C之路ppt课件.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《走向C之路ppt课件.ppt》由会员分享,可在线阅读,更多相关《走向C之路ppt课件.ppt(29页珍藏版)》请在三一文库上搜索。

1、走向C+之路,WindyWinter ,#include main(t ,_,a) char*a;return ti+?,()?qzyrjuvcdefg h,!kbpolwxs.t main(“),面向对象的C+,C+为此而生,类,Good morning class.,类是C+的新特性,为适应面向对象的程序设计而提出; 在C中,已经有了结构的概念; 类与结构的最大不同之处在于不仅可以包含成员变量(常量),还可以包含成员函数。 当然,类还包括一些其他的特性: 成员变量、成员函数的访问权限; 构造函数; 析构函数; 拷贝构造函数; 隐式类型转换; ,一个著名的类,class person pri

2、vate: string m_name; int m_age; string m_email; void update(); public: person(); person(); string get_namecard(); ; person wjj;,域运算符:,Well, one is just not enough.,string person:get_namecard() return m_name+m_email; #include int main() std:cout“wjj is a smart girl.”std:endl; return 0; ,this指针和成员函数的c

3、onst属性,This is my self.,每个类都有一个特殊的“成员”this,表示对象自身; this只能在该类的内部使用,与不指明this没有区别: this-m_name m_name; this-update() update(); 如果修改get_namecard()的声明为: string get_namecard() const ; get_namecard()将不能更改任何成员变量的值,在函数内部: this指针变成指向常量的指针; 任何成员变量被附加const属性。 这种声明主要用于指明该函数不会更改成员变量的值。,构造函数,constructor,没有返回值类型,与类

4、同名的函数被认为是构造函数; 它的作用就是构造一个对象。 如何构造? person() : m_name(“Wang Jingjing”), m_age(0) person(const person & t) : m_name(t.m_name), m_age(t.m_age), m_email(t.m_email) person(string name, int age) : m_name(name), m_age(age) ,构造函数,Its something not that new.,如果将某个构造函数声明为private,则这个构造函数将无法使用。一般来说,这样做的目的是阻止编译器

5、生成缺省的构造函数。 只带有一个参数的构造函数表明了一种可能的隐式类型转换: string(const char * s); new与malloc的区别在于:前者创建对象,后者分配空间。,析构函数,destructor,没有返回值,名字是,没有参数的函数是析构函数。构造函数可以有多个,析构函数只能有一个。 它的作用是销毁一个对象。 如果没有声明析构函数,编译器将合成默认析构函数: 对于内置类型,释放其空间; 对于类类型,调用其析构函数。 实际上,上面两步是编译器附加在任何析构函数最后的两步。因为没有办法显式“释放空间”和调用析构函数。 析构函数只能在delete时和离开该对象的生存域时被自动调

6、用。 也存在将析构函数声明为private的情况。,静态成员,Steady, steady,static关键字也可以修饰类的成员: class person static int population; static int get_population(); ; 被修饰的成员叫做类的静态成员,是这个类的属性,不是某个对象的属性。 访问用: int person:population = 0; person:get_population();,运算符重载,Its fully operational.,C+不仅提供了对函数的重载,也提供了对运算符的重载。运算符可以视为特殊的函数。一个简单的运算符

7、重载如下: 单目运算符: operator ( a); int 特别的运算符重载:+、-。,运算符重载,还有一类特殊的运算符也可以被重载: opetator () operator int(); operator xxx(); 这样的运算符必须是某个类的成员函数,它为这个类提供向特定类型的隐式类型转换。比如: class person string operator string(); 更多的很多情况下,运算符重载是一个复杂的工程。在你真正掌握重载之前,请慎用。,继承与派生,Kim Jong-il chooses third son as his successor.,class tallen

8、t : public person int IQ; ; 上面定义了person类的一个派生类tallent类,它将获得person类的一切成员,还另外附加了一个IQ成员。 上面的“一切成员”,不包括基类的构造函数、析构函数、new运算符和=运算符。但派生类中可以访问他们。 派生类对象可以隐式转换为基类类型; 派生类类型的指针可以隐式转换为基类类型的指针; person * WindyWinter = new tallent;,虚函数与多态,Im seeking VPS co-tenants.,在声明某个成员函数时加上virtual修饰符,表示允许派生类重载该函数;在声明析构函数时加上virtu

9、al修饰符,产生特殊效果。 class person virtual string get_namecard(); ; WindyWinter-get_namecard(); virtual string get_namecard() = 0;,多继承,Well, one is just not enough.,一个类可以继承于多个类,派生类获得所有基类的成员。 class tallent : public person, public another_person int IQ; ;,友元,A friend in need is a friend indeed.,class tallent

10、friend smart_girl; friend bool pay(); friend bool dreamland:login(); friend tallent operator +(); ; 友元需要声明在类的public段之下。 友元是一个声明。友元不是类的成员。,Tags Cloud,Keywords,类 域运算符 构造函数 析构函数 this指针 静态成员 静态成员函数 友元 继承 派生 多继承 虚函数 纯虚函数 多态 运算符重载 类型转换 OOP 虚继承,标准模板库与泛型编程,Hallowed are the C+,标准模板库,STL,C语言有一个小巧精干的标准库; C+在引入

11、泛型编程的思想后,标准库得到了广泛的、革命性的变革标准模板库。 string获得大量类的特性; vector、list、deque、queue、stack、priority_queue、set/map纷纷进入STL; STL中的函数不再限定参数的类型,而只做出基本要求: min、max、sort要求此种类型定义过”“; binary_search要求传递进来的序列可以随机访问; ,string,#include 成员函数: :返回指定位置的字符; size()、length():返回长度,O(1)时间; clear():清空; +=、insert():插入; erase():删除; find(

12、):查找; substr():取子串。 它们的详细用法、函数原型,以及更多的成员函数和用法,请去http:/ 查找。,string,、=、=、!= getline(cin, str):从标准输入流cin读取一行,放入str。 coutstr:从标准输入流读取一个字符串(以非空白字符开头、空白字符结尾),放入str。,vector,#include vector a; :取指定位置的元素,0是第一个元素; size():vector的长度; push_back():将一个元素插入到vector的最后面; insert()、clear()、erase() http:/ vector:iterato

13、r i; i=a.begin(); *i 取得一个元素的引用;i-push_back()。 a.end() 表示“超出末端的位置”: for (i=a.begin(); ia.end(); +i) vector的迭代器可以随机访问: -i; i += 2; i -= 6; 与iterator相仿的是reverse_iterator,对应有rbegin()、rend()。 其他类型的迭代器比较复杂。 http:/ list b; size():list的长度,O(1)时间; push_back()/push_front():将一个元素插入到list的最后面/最前面; insert()、clear

14、()、erase() splice()、merge() list:iterator 只能+/-,不能随机访问。 http:/ vector a; sort(a.begin(), a.end(); vector c; sort(c.rbegin(), c.rend(); int b100; sort(b, b+100); list d; sort(d.begin(), d.end(); X d.sort() O http:/ min(a, b) max(a, b) swap(a, b) http:/ iostreamscanf/pringf fstreamfscanf/fprintf stringstreamsscanf/sprintf cinXXX; coutXXX; foutXXX; http:/ Cloud,Keywords,string vector list 迭代器 sort iostream fstream stringstream,路漫漫其修远兮 吾将上下而求索,作业,Homework,TopCoder,Soli Deo gloria.,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1