新手新话题 觉得 C plus plus 面向对象程序设计视频 讲得很具体

czhaii 2013-10-07 06:00:10
听了很多天C plus plus 面向对象程序设计觉得讲得很具体很好,
把C++各个知识点讲得很透彻,买了好几本C++书籍,有些没有讲到的
在这里面有,当然也有这里面没有提及的东西,但是我觉得只要
这里面提到的就讲得很全面,比如讲this指针,new和delete。
就是不知道视频中是依哪一本教材来讲的,还有视频中的例子
在什么地方可以找到,要是有这样一本书就更好了。我把总共
二十五篇视频全部下载了,现在听了自己最关注的一部分。
而且边听边记,说句实在话,很累把讲的话记下来非常费时间。
来来回回听,再一遍一遍核对,记一篇几百字的段落要很长
时间。因为有些细节其他教材中说得很少,C++不做记录有些
学的时候是懂了,过一段时间又忘记了,所以感觉学多少一定
要记多少,今后忘记再温习一遍效率高一些。



C plus plus 面向对象程序设计 视频10 听写1.2--this指针



C plus plus 面向对象程序设计 听写1--this指针
/***C plusplus面向对象程序设计11
this 指针**********************/
#include<StdAfx.h>
#include<iostream.h>
class abc
{
char a; //私有成员函数字符型变量a
int b; //私有成员函数整型变量b
public:
void init (char ma,int mb) //形参 ma mb
{a=ma,b=mb;} //传递给私有函数a b
void disp()
{
cout<<"czh="<<a<<endl;
cout<<"cqy="<<b<<endl;
}
};
main()
{
abc ob; //创建一个abc类对象ob
ob.init('a',72); //访问abc类对象ob并给实参数值
ob.disp();
abc op; //创建一个abc类对象op
op.init('b',03); //访问abc类对象op并给实参数值
op.disp();
return 0;
}
也就是说对于一个类来说,它声明的成员函数啊,其实在这个类下面所有的对象都可以调用,那么任何
一个对象调用这个成员函数的时候呢,执行这个函数里面的语句的时候,操作的就是该对象的数据成员,
系统是怎么做到这一点的呢?也就是说,它设计了一个隐含指针,叫做this指针,它指的谁呢?它就指的
哪个对象调来用它,这个指针呢它就指向哪个对象。
我们看一看,这里有一个很形象的一个说明,啊。那么你看,成员函数init。这个函数啊它的函数体
里面就是给数据成员A赋值ma就是形参的值,b呢数据成员b呢赋值mb,那么我们再看主函数,主函数在
abc这个类下面,建立了一个对象ob之后。然后通过ob这个对象调用init函数的时候,实参放进去了,
怎么就能做到把这两个实参的数据通过传给了形参之后,又给了恰好就是对象ob的数据成员呢?它是
这样的,也就是说,原来的init函数,我们定义init函数的时候只是给出了这样的一个参数表 是不是?
但是实际在系统里面呢,它有三个形参,其中这个形参是系统加进来的,就是说它有一个this指针,这个
指针它指向谁呢?也是abc里面的一个对象,那么这个this指针是什么时候用的呢?在函数体里面它也增加
了一条语句,它增加了什么呢? 也就是说当你这个调用这个通过一个实际对象ob来调用init函数的时候,
不仅把这两个实参给了这两个形参ma和mb,还把对象ob的地址 你看到吧 把对象ob的地址 给了谁呢?
给了那个加出来的形参this,这样this指针就指向了ob这个对象,谁来调用它它就指向了谁,那么在函数体
里面呢,每个数据成员a和b之前呢,系统都隐含的加上了什么?this指针的指向,正因为有这样this指针。
它在这样起着作用,使得哪个对象 来调用成员函数那么成员函数里面所操作数据成员就是哪一个对象的,
那么我们在上堂课也讲到了,现在我们学习this指针的时候,可能我们只要记得,this指针是帮助成员函数
啊来找到该对哪一个对象的数据成员进行操作 ,事实上呢,在以后我们遇到了很多情况当中呢?我们自己
都可以怎么样?利用this指针,往往是假如在我们在编写语句要利用this指针的时候,往往是来判断。判断
什么呢,判断就是对象调用这个成员函数以后,这个调用这个成员函数的这个对象是不是就是这个函数
的参数表里面的那个对象,我们判断他们是不是同一个。
C plus plus 面向对象程序设计 听写2--this指针


/***C plusplus面向对象程序设计11
this 指针**********************/
#include<StdAfx.h>
#include<iostream.h>
class tr //类tr
{
int i; //
public:
tr(int n) //函数一:tr
{i=n;} //公有成员n传递给所有成员i
void set_i(int n) //函数二:seti
{i=n;} //公有成员n传递给所有成员i
int get_i() //函数三:geti
{return i;} //返回私有成员i
};
void sqr_it(tr ob) //函数a 求平方
{
ob.set_i(ob.get_i()*ob.get_i()); //
cout<<"copy of obj has i value of"<<ob.get_i();//
cout<<"\n";
}
main()
{
tr obj(10); //创建类tr的对象obj赋实参值10
sqr_it(obj); //调用函数sqr,函数内实例对象obj取实参值运算
cout<<"but,obj.i is unchanged in main:"; //
cout<<obj.get_i(); //
return 0;
}



就比如这里 class 一个新的类class 是tr 那么 然后你可以看到我们
下面有一个函数 sqrt 那么是 sqr吧 它是求平方,那么你可以看到,
它的参数就是一个什么,就是类tr下面一个对象ob对吧,这就是形参对象,
然后在这函数体里面呢,取的是什么呢 ?通过这个形参的对象调用成员
函数geti来获得什么?形参对象ob的数据成员i,然后再把它给怎么样啊,
乘一乘,又作为另外一个它自己的成员函数seti的什么 实参了,对不对,
而这个seti这个成员函数的作用就是给ob这个对象的数据成员i怎么样-
赋值,因此通过这样的一条语句的调用呢,它所达到的目的是什么呢,就给
自己的数据成员给什么double了一下,作了一个平方,然后再输出,那么
主函数里面呢,先建立了一个实际对象的obj,然后拿它作为实参放进来,
是吧,之前再作调用sqr这个求平方的这个函数,但是注意这个sqr这个函数
它不是成员函数,因此调用它的时候前面不用写的对象打点来调用,对吧?
那么最后呢,为什么有这么一条输出语句呢?再把obj的这个geti成员函数
geti调用一下,要把它的那个数据成员i输出一下呢?就是想看看实际的对象
的obj,它的数据成员i其实在这里就是十了,对不对,i拿到的就是十了,
有没有变 有没有变成平方,在这里它就没有变,什么道理呢?就是因为这个
obj只作为一个实参对象,它把它的数据成员拷贝给了形参对象ob,那么在函数
里呢,对形参对象的数据成员的任何操作它对实参对象是没有影响的。

/***C plus plus 面向对象程序设计 听写1-
输出测试 创建对象后输出成员函数值*******
2013 8:17 15:22*************************/
#include<StdAfx.h>
#include<iostream.h>
class tr //类tr
{
int i; //
public:
tr(int n) //函数一:tr
{i=n;} //公有成员n传递给所有成员i
void set_i(int n) //函数二:seti
{i=n;} //功能 公有成员n传递给所有成员i
int get_i() //函数三:geti
{return i;} //功能 返回私有成员i
};
main()
{
tr obj1(10); //创建对象obj1赋实参值10
cout<<obj1.get_i()<<endl; //输出成员函数i的值
tr obj2(15); //创建对象obj2赋实参值15
cout<<obj2.get_i()<<endl; //输出成员函数i的值
return 0;
}
...全文
137 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
buyong 2013-10-07
  • 打赏
  • 举报
回复
好好学习,天天向上
图灵狗 2013-10-07
  • 打赏
  • 举报
回复

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧