《新标准C++程序设计》3.9-3.10(C++学习笔记11)
一、C++程序到C程序的翻译
程序示例分析:
C++:
class CCar
{
public:
int price;
void SetPrice
(int p);
};
void CCar::SetPrice
(int p)
{ price = p; }
int main() {
CCar car;
car.SetPrice();
return ;
}
C:
struct CCar {
int price;
};
void SetPrice(struct CCar * this,int p)
{ this->price = p; }
int main() {
struct CCar car;
SetPrice( & car,);
return ;
}
拆分
(1)C++
class CCar
{
public:
int price;
void SetPrice
(int p);
};
C
struct CCar {
int price;
};
(2)C++
void CCar::SetPrice
(int p)
{ price = p; }
C
void SetPrice
(struct CCar * this,int p)
{ this->price = p; }
(3)C++
int main() {
CCar car;
car.SetPrice();
return ;
}
C
int main() {
struct CCar car;
SetPrice( & car,);
return ;
}
二、this指针的作用
其作用就是指向成员函数所作用的对象
非静态成员函数中可以直接使用this来代表指向该函数作用的对象的指针。
程序示例分析:
(1)
class Complex {
public:
double real, imag;
void Print() { cout << real << "," << imag ; }
Complex(double r,double i):real(r),imag(i){ }
Complex AddOne() {
this->real ++; //等价于 real ++;
this->Print(); //等价于 Print
return * this;}
};
int main() {
Complex c1(,),c2(,);
c2 = c1.AddOne();
return ;
}
输出:2,1
(2)
class A
{
inti;
public:
void Hello() { cout << "hello" << endl; }
};
int main()
{
A * p = NULL;
p->Hello();
}
输出:hello
拆分:
1)C++
void Hello() { cout << "hello" << endl; }
C
void Hello(A * this ) { cout << "hello" << endl; }
2)C++
p->Hello();
C
Hello(p);
(3)
class A
{
int i;
public:
void Hello() { cout << i << "hello" << endl; }
};
int main()
{
A * p = NULL;
p->Hello();
}
出错!!!
拆分:
1)C++
p->Hello();
C
Hello(p);
2)C++
void Hello() { cout << i << "hello" << endl; }
C
void Hello(A * this ) { cout << this->i << "hello"<< endl; }
this为NULL,出错!!
静态成员函数中不能使用 this 指针!
因为静态成员函数并不具体作用与某个对象!
因此,静态成员函数的真实的参数的个数,就是程序中写出的参数个数!
Question:
以下说法不正确的是:
A) 静态成员函数中不能使用this指针
B) this指针就是指向成员函数所作用的对象的指针
C) 每个对象的空间中都存放着一个this指针
D) 类的非静态成员函数,真实的参数比所写的参数多1
答案:C
三、在多个文件中使用类
在有多个文件的C++程序中,如果多个.cpp文件都用到同一个类,可以将类的定义写在一个头文件中,然后在各个.cpp文件中包含该头文件。类的非内联成员函数的函数体只能出现在某一个.cpp文件中,不能放在头文件中被多个.cpp文件包含,否则链接时会发生重复定义的错误。类的内联成员函数的函数体最好写在头文件中,这样编译器在处理内联函数的调用语句时,就能在本文件包含的头文件中找到内联函数的代码,并将这些代码插入调用语句处。内联成员函数放在头文件中被多个.cpp文件包含,不会导致重复定义的错误。
《新标准C++程序设计》3.9-3.10(C++学习笔记11)的更多相关文章
- 《新标准C++程序设计》3.8(C++学习笔记10)
友元 友元分为友元函数和友元类两种. 一.友元函数 在定义一个类的时候,可以把一些函数(包括全局函数和其它类的成员函数)声明为“友元”,这样那些函数就成为该类的友元函数,在友元函数内部就可以访问该类对 ...
- 《新标准C++程序设计》4.5(C++学习笔记15)
实例:长度可变的整型数组类 int main() { //要编写可变长整型数组类,使之能如下使用: CArray a; //开始里的数组是空的 ; i < ; ++i) a.push_back( ...
- 《新标准C++程序设计》4.6(C++学习笔记16)
重载流插入运算符和流提取运算符 流插入运算符:“<<” 流提取运算符:“>>” cout 是在 iostream 中定义的,ostream 类的对象. “<<” 能 ...
- 《新标准C++程序设计》4.4(C++学习笔记14)
运算符重载为友元函数 一般情况下,将运算符重载为类的成员函数,是较好的选择. 但有时,重载为成员函数不能满足使用要求,重载为普通函数,又不能访问类的私有成员,所以需要将运算符重载为友元. class ...
- 《新标准C++程序设计》4.1(C++学习笔记12)
运算符重载的概念和原理 一.运算符重载的需求 C++预定义的“+.-. * ./.%. ^ .&.~.!.|. = .<< >>.!= ”等运算符,只能用于基本数据类型 ...
- 《新标准C++程序设计》3.5(C++学习笔记8)
常量对象和常量成员函数 一.常量对象 如果希望某个对象的值初始化后就再也不被改变,则定义该对象时可以在前面加const关键字,使之成为常量对象. class CDemo { private: int ...
- 《新标准C++程序设计》1.7-1.10(C++学习笔记2)
1.内联函数(inline关键字) eg.inline int Max(int a,int b) { if(a>b) return a; return b; } 当编译器处理调用内联函数的语句时 ...
- JavaScript高级程序设计(第三版)学习笔记11、12、17章
章, DOM扩展 选择符 API Selector API Level1核心方法querySelector .querySelectorAll,兼容的浏览器可以使用 Document,Element ...
- 正确处理类的复合关系------新标准c++程序设计
假设要编写一个小区养狗管理程序,该程序需要一个“主人”类,还需要一个“狗”类.狗是有主人的,主人也有狗.假定狗只有一个主人,但一个主人可以有最多10条狗.该如何处理“主人”类和“狗”类的关系呢?下面是 ...
随机推荐
- egret inspector插件无法使用
调试项目要安装egret inspector查看游戏场景的资源,装了插件点击不显示. 解决方法:将chrome版本回退. 下载地址:http://mydown.yesky.com/pcsoft/279 ...
- java连接sql server 2008
请先确保已经设置好了sa,如果不是,可以参照下面链接修改http://jingyan.baidu.com/article/8cdccae9452b3c315513cd52.html 然后重启数据库,重 ...
- 配置<welcome-file>为自定义路径
welcome-file是web.xml中的一个配置,其作用是配置启动项目时默认跳转的欢迎页面,一般我们会将其指定为一个静态页面. 那如果我们要将自定义的请求路径作为欢迎页面该怎么做呢? 1.配置we ...
- js面试代码中的“坑”
1.typeof 对类型的判断 (function() { return typeof arguments; } )(); 答案:"Object" 解释:arguments是一个伪 ...
- 十七、java内存模型_JVM_JDK_类加载
1.Java内存模型 共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见.从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的 ...
- 自定义sort排序
java的sort自定义: 1.排序对象必须是封装类而不能是基本数据类型: 2.调用Arrays.sort(array, left, right, cmp)进行排序,array为数组,left.rig ...
- PyCharm 2018.1破解激活步骤
1.下载破解补丁 下载地址:https://pan.baidu.com/s/1qjI9uHaw0x374rwu6H8djA 将下载下来的破解补丁放到C:\software\JetBrains\PyCh ...
- 嵊州普及Day4T1
题意:从n个数中选出k个数,使他们任意两数之差都等于m. 思路:任意差值都等于m,不就等价于k个数模m余数相同吗? 然后桶排储蓄一下各数余数即可. 见代码: #include<iostream& ...
- 2017 青岛现场赛 I The Squared Mosquito Coil
Lusrica designs a mosquito coil in a board with n × n grids. The mosquito coil is a series of consec ...
- 1_01_MSSQL课程_基础入门2
1.数据库的迁移方案 ->分离 附加 ->权限问题: ->启用Administrator账号 ->把数据库文件放到默认的数据库文件存放目录. ->数据库文件兼容级别,设置 ...