入门三嵌入式改变未来_第1页
入门三嵌入式改变未来_第2页
入门三嵌入式改变未来_第3页
入门三嵌入式改变未来_第4页
入门三嵌入式改变未来_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

改变未来!C++入门三1类和对象2类和对象3结构的定义struct{char

name[30];unsigned

int

age;char

address[100];float

salary;};4结构的操作1void

setName({*pP,

char*

str)strcpy(pP->name,

str);}void

setAge({pP->age

=

yr;}void

setSalary({pP->salary

=

s;}void

setAddress({*pP,

unsigned

int

yr)*pP,

float

s)*pP,

char*

addr)strcpy(pP->address,

addr);}5结构的操作2void

disp( *pP

){cout

<<

"Name:"

<<

pP->name

<<

endl;cout

<<

"Age:"

<<

pP->

age

<<

endl;cout

<<

"Address:"

<<

pP->

address

<<

endl;cout

<<

"Salary:"

<<

pP->salary

<<endl;}6使用结构变量的.cpp#include

<iostream>…int

main(

){Jack

=

{

"Jack",

30,

"Beijing

China",

8000.0};disp(

&Jack

);somebody;setName(

&somebody,

"Lisa");setAge(

&somebody,

20);setAddress(

&somebody,

"Toronto,

Canada");setSalary(

&somebody,

6000.0);disp(

&somebody

);}7封装好的结构1struct{char

name[30];unsigned

intage;char

address[100];float

salary;void

setName(char*);void

setAge(unsigned

int);void

setAddress(char*);void

setSalary(float);void

disp(

);};8封装好的结构2void

::setName(char*

str){strcpy(name,

str);}void{::setAge(unsigned

int

yr)age

=

yr;}void{::setSalary(float

s)salary

=

s;}void{::setAddress(char*

addr)strcpy(address,

addr);}9封装好的结构3void

::disp(

){cout

<<

"Name:"

<<

name

<<

endl;cout

<<

"Age:"

<<

age

<<

endl;cout

<<

"Address:"

<<

address

<<

endl;cout

<<

"Salary:"

<<

salary

<<

endl;}10使用封装后的结构变量的.cpp#include

<iostream>…int

main(

){Jack

=

{

"Jack",30,

"Beijing

China",

8000.0};Jack.disp(

);somebody;somebody.setName(

"Lisa"

);somebody.setAge(

20

);somebody.setAddress(

"Toronto,

Canada"

);somebody.setSalary(6000.0);somebody.disp(

);}11仍然存在的问题#include

<iostream>…int

main(

){Jack

=

{

"Jack",

30,

"Beijing

China",

8000.0};Jack.disp(

);Jack.salary

=1000.00;Jack.disp(

);}1213如何实现数据隐藏引入class类型对数据成员进行保护增加存取范围私有成员private保护成员protected公共成员public定义类来实现数据隐藏class{private:char

name[30];unsigned

int

age;char

address[100];float

salary;public:void

setName(char*

str);void

setAge(unsigned

int

yr);void

setAddress(char

*str);void

setSalary(float

yuan);void

disp(

);};1415类成员的作用域属性在C++中,class与struct的区别struct的缺省作用域为publicclass的缺省作用域为privateprivate的数据成员只能被类的成员函数所使用使用对象的.cpp#include

<iostream>…int

main(

){somebody;somebody.setName(

"Lisa"

);somebody.setAge(

20

);somebody.setAddress(

"Toronto,

Canada"

);somebody.setSalary(6000.0);somebody.disp(

);}16类的定义17类的定义格式1819类定义格式20例子21例子22定义类的注意事项23定义类的注意事项24例子25对象的定义格式26类的 与类的定义类的一般在头文件中类的所有成员类的成员的属性所有接口(公共函数成员)的签名(格式)类的定义一般放在程序文件(

.cpp文件)中定义类的所有成员函数的具体实现方法27对象对象是类的一个实例是一个class,它是一个数据类型somebody是一个对象,它是一个具体的变量类是一类对象的描述定义结构,可以定义类,可以许多变量许多对象28增加对象初始化自己的能力新.cpp程序的问题Jack

=

{

"Jack",

30,

"Beijing

China",

8000.0};Jack.disp(

);构造函数一种特殊的函数没有返回类型只能作为是公共成员只能用一个固定的名字,函数名就是类的名字29类的构造函数class{…public:(char*,

unsigned

int,

char*,

float);};3031构造函数的特点构造函数只在建立对象的时候自动被调用一次构造函数必须是公共的,否则无法生成对象构造函数只负责为自己的类构造对象32有构造函数的例子simpleClass.cpp#include

<iostream>using

namespace

std;class

A{int

a;public:A(

)

{

cout

<<

"A(

)"

<<

endl;}A(const

int

&

o)

//constructor

overload{a

=

o;cout

<<

"A(const

int

&)"

<<

endl;}};int

main(

){A

o

=

A(

);int

a=100;A

p(a);}33析构函数与构造函数相对应与构造函数的作用相反析构函数的形式~类名(

){…}34析构函数的特点固定的函数名称~类名()没有返回类型没有参数不可以重载一般由系统自动的调用35C++默认的构造函数C++自动给每一个class加上一个构造函数这个构造函数没有任何参数这个构造函数也不做任何操作如果用户自己定义了一个构造函数,C++就不再提供默认的构造函数了36C++默认的析构函数C++自动给每一个class加上一个析构函数析构函数不能有任何参数这个析构函数也不做任何操作如果用户自己定义了一个析构函数,C++就不再提供默认的析构函数了构造函数的作用提供

成员变量的初始化功能完成对象的初始化–内存管理实现对象的拷贝功能37构造函数的调用class

A{public:void

disp(

);};A

a,

*b

=

new

A,

*c

=

new

A(

),

*d

=

new

(A);//are

theya

=

A(

);?A

aa(

);//won’t instantiate

any

object.38构造对象的顺序的顺序构造局部与静态局部对象,以

–静态对象只被构造一次全局对象在main之前构造–全局对象的构造无特殊顺序数据成员对象,以 顺序构造39析构函数的作用与构造函数相反资源内存管理析构函数的调用什么时候析构函数被调用4041析构函数的例子#include

<iostream>using

namespace

std;class

Str{int

len;char

*string;public:Str(char*

=

"default");~Str(

);};Str::Str(char

*s){string

=new

char[len=strlen(s)+1];strcpy(string,

s);}Str::~Str(){cout

<<

"Destructor

of

"

<<

string<<

endl;delete

[]string;}int

main(

){Str

*words

=

new

Str[3];delete

[]words;}析构函数的直接调用析构函数可以被直接调用#include

<iostream>…int

main(

){…p;p.~ (

);…}4243对象指针定义的类就是一个数据类型对象与对象指针new

与delete对象指针的使用对象的对象也可以有别名44对象的指针与……{::

(const &

p)strcpy(this->name,

);this->age

=p.age;strcpy(this->address,

p.address);this->gender

=

p.gender;}……45构造函数和析构函数46构造函数和析构函数47例子4849缺省构造函数和缺省析构函数50拷贝构造函数5152深拷贝与浅拷贝53深拷贝与浅拷贝54拷贝函数55565758类的拷贝构造函数的重写59赋值函数60赋值函数61重载性6263重载与重写的概念与区别6465重写/覆盖覆盖是指派生类函数覆盖基类函数,特征是:1不同的范围(分别位于派生类与基类);234函数名字相同;参数相同;基类函数必须有virtual关键字。66函数重载成员函数被重载的特征:1234相同的范围(在同一个类中);函数名字相同;参数不同;irtual关键字可有可无。函数隐藏了与其同名的基“隐藏”是指派生类的函数类函数,规则如下:1如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载

)。2如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。67面 象的程序设计方法1自然界就是由许多的对象组成自然界中的任何一个实体都可以看作一个对象非实体也能看成某种对象(逻辑上的实体)自然界的现象就是许许多多的同类与不同类的对象在相互作用一个对象包含一个或多个其他的对象一个对象使用另一个或多个对象同种或不同种的对象之间存在各种复杂的关系68面 象的程序设计方法2分析并分解出某个问题中的种种对象准确的描述所有对象之间的种种关系找到它们之间的所有相互作用用程序设计语言与工具来描述它们用程序开发语言来表达(实现)它们6970对象的特点对所有对象进行抽象总结名称属性行为用class来表述传统的程序设计方法程序=数据+算法算法=函数+控制流程传统方法的特点结构化封装,但无法隐藏算法依赖于数据,更改与重用性差71面 象的方法分析问题,找到对象抽象出对象的属性与特点划分出类确定类与类的关系用类来定义程序结构72面 象的优点1更好的封装数据隐藏操作把特定的数据与相应的操作组合在一起把可见的与不可见的部分很理想的分离开来C++语言中封装是由类来实现的73面 象的优点2继承更好的可重用特性更易扩展与更可

性74面 象的优点3象特性之一多态最重要的面突出的优点75Exercises设计一个叫做String的类,要求该类能够完成以下功能:(1)构造函数能够根据实际传入空间;缺该空间;的参数分配实际省时为1字节;(2)析构函数(3)编写成员函数Assign,可以将一个字符串赋值给该类;(4)编写成员函数Disp,可以将该类的内容打印到屏幕上;(5)编写成员函数Replace,用于替换某一指定的字符串;(6)编写成员函数Append,用于向已有的数据后面添加数据;(7)编写成员函数Size,用于得到当前数据的真实长度。编写测试程序,测试这个类。class

String{char

*

str;unsigned

int

len;public:String();String(const

char*sz);~String();//Return

0

--success,

-1

Errorint

Assign(char

*);void

Disp();//Return

0--

success,

-1

Errorint

Replace(ch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论