走向C++之路(二).ppt

上传人:ga****84 文档编号:465895 上传时间:2018-10-10 格式:PPT 页数:29 大小:280.50KB
下载 相关 举报
走向C++之路(二).ppt_第1页
第1页 / 共29页
走向C++之路(二).ppt_第2页
第2页 / 共29页
走向C++之路(二).ppt_第3页
第3页 / 共29页
走向C++之路(二).ppt_第4页
第4页 / 共29页
走向C++之路(二).ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

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

2、;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.”m_name m_name;this-update() update();如果修改get_namecard()的声明为:string

3、 get_namecard() const ;get_namecard()将不能更改任何成员变量的值,在函数内部:this指针变成指向常量的指针;任何成员变量被附加const属性。这种声明主要用于指明该函数不会更改成员变量的值。,构造函数,constructor,没有返回值类型,与类同名的函数被认为是构造函数;它的作用就是构造一个对象。如何构造?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) per

4、son(string name, int age): m_name(name), m_age(age) ,构造函数,Its something not that new.,如果将某个构造函数声明为private,则这个构造函数将无法使用。一般来说,这样做的目的是阻止编译器生成缺省的构造函数。只带有一个参数的构造函数表明了一种可能的隐式类型转换:string(const char * s);new与malloc的区别在于:前者创建对象,后者分配空间。,析构函数,destructor,没有返回值,名字是,没有参数的函数是析构函数。构造函数可以有多个,析构函数只能有一个。它的作用是销毁一个对象。如果

5、没有声明析构函数,编译器将合成默认析构函数:对于内置类型,释放其空间;对于类类型,调用其析构函数。实际上,上面两步是编译器附加在任何析构函数最后的两步。因为没有办法显式“释放空间”和调用析构函数。析构函数只能在delete时和离开该对象的生存域时被自动调用。也存在将析构函数声明为private的情况。,静态成员,Steady, steady,static关键字也可以修饰类的成员:class personstatic int population;static int get_population();被修饰的成员叫做类的静态成员,是这个类的属性,不是某个对象的属性。访问用:int person

6、:population = 0;person:get_population();,运算符重载,Its fully operational.,C+不仅提供了对函数的重载,也提供了对运算符的重载。运算符可以视为特殊的函数。一个简单的运算符重载如下:单目运算符: operator ( a);int 特别的运算符重载:+、-。,运算符重载,还有一类特殊的运算符也可以被重载:opetator ()operator int();operator xxx();这样的运算符必须是某个类的成员函数,它为这个类提供向特定类型的隐式类型转换。比如:class personstring operator string

7、();更多的很多情况下,运算符重载是一个复杂的工程。在你真正掌握重载之前,请慎用。,继承与派生,Kim Jong-il chooses third son as his successor.,class tallent : public personint IQ;上面定义了person类的一个派生类tallent类,它将获得person类的一切成员,还另外附加了一个IQ成员。上面的“一切成员”,不包括基类的构造函数、析构函数、new运算符和=运算符。但派生类中可以访问他们。派生类对象可以隐式转换为基类类型;派生类类型的指针可以隐式转换为基类类型的指针;person * WindyWinter

8、= new tallent;,虚函数与多态,Im seeking VPS co-tenants.,在声明某个成员函数时加上virtual修饰符,表示允许派生类重载该函数;在声明析构函数时加上virtual修饰符,产生特殊效果。class personvirtual string get_namecard();WindyWinter-get_namecard();virtual string get_namecard() = 0;,多继承,Well, one is just not enough.,一个类可以继承于多个类,派生类获得所有基类的成员。class tallent : public p

9、erson, public another_personint IQ;,友元,A friend in need is a friend indeed.,class tallentfriend smart_girl;friend bool pay();friend bool dreamland:login();friend tallent operator +();友元需要声明在类的public段之下。友元是一个声明。友元不是类的成员。,Tags Cloud,Keywords,类 域运算符构造函数 析构函数this指针 静态成员 静态成员函数友元继承 派生 多继承 虚函数 纯虚函数 多态运算符重

10、载 类型转换OOP虚继承,标准模板库与泛型编程,Hallowed are the C+,标准模板库,STL,C语言有一个小巧精干的标准库;C+在引入泛型编程的思想后,标准库得到了广泛的、革命性的变革标准模板库。string获得大量类的特性;vector、list、deque、queue、stack、priority_queue、set/map纷纷进入STL;STL中的函数不再限定参数的类型,而只做出基本要求:min、max、sort要求此种类型定义过”str:从标准输入流读取一个字符串(以非空白字符开头、空白字符结尾),放入str。,vector,#includevector a;:取指定位置

11、的元素,0是第一个元素;size():vector的长度;push_back():将一个元素插入到vector的最后面;insert()、clear()、erase()http:/ i;i=a.begin(); *i 取得一个元素的引用;i-push_back()。a.end() 表示“超出末端的位置”:for (i=a.begin(); iXXX; coutXXX; foutXXX;http:/ Cloud,Keywords,string vector list迭代器sortiostream fstream stringstream,路漫漫其修远兮吾将上下而求索,作业,Homework,TopCoder,Soli Deo gloria.,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。