一、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文件包含,不会导致重复定义的错误。

最新文章

  1. 让我们喝喝下午茶,聊聊AJAX和JSON
  2. java微信开发(wechat4j)——支持微信JS-SDK的jsapi_ticket中控服务器
  3. Java基础-被final修饰的引用变量的指向
  4. 用RPM包安装MySQL的默认安装路径问题
  5. JavaScript:文本域事件处理
  6. C++ set容器简单用法
  7. PAT 10-2 删除字符串中的子串
  8. 操作系统杂谈 mac 和linux windows若干概念
  9. Java中的日期处理类
  10. 服务端套接字类CxServerSocket的使用
  11. python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)、多态、封装的特性property
  12. 【1】Asp.Net Core2.2从环境配置到应用建立
  13. python 面试题
  14. PHP-max_execution_time与fpm.request_terminate_timeout介绍
  15. leecode第五百五十七题(反转字符串中的单词 III)
  16. ETCD原理
  17. JMeter学习(十六)JMeter测试Java(二)(转载)
  18. web开发有那些牛逼东西可以用
  19. QSet使用及Qt自定义类型使用QHash等算法
  20. hdu 5211 Mutiple 数学

热门文章

  1. Write-up-Toppo
  2. RF之目录结构、执行参数、用例标签 -6
  3. 七 MyBatis整合Spring,DAO开发(传统DAO&amp;动态代理DAO)
  4. http请求常见的状态码
  5. ORACLE锁表问题
  6. 「CF10D」LCIS
  7. spring事务传播属性和隔离级别
  8. poj2236 Wireless Network(并查集直接套模板
  9. 洛谷 P3801 红色的幻想乡
  10. 018.CI4框架CodeIgniter数据库操作之:Delete删除一条数据