C++对c的扩展

问题抛出:

1. C++编译时如何区分是c1对象,c2对象还是c3对象调用了类的方法

2. class类是一个数据类型,和对象之间是1:n关系

3. 学习c++的方法是和面向过程不一样的

 c++对c的扩展:

1.面向对象概念(cout cin类、对象 面向对象和面向过程求解问题)

2.易犯错误模型(引入成员函数的必要性)

  1. class Cycle{  
  2. public:  
  3.       double radius;  
  4.       double pi=3.14;  
  5.       double area=pi*radius*radius;  
  6. }  
  7. void main(){  
  8.    Cycle ci;  
  9.    ci.radius=2;  
  10.    cout<<ci.area<<endl;//此时输出的是随机值,因为当构建Cycle对象时,就已经给area初始化了  
  11. }  
class Cycle{
public:
      double radius;
      double pi=3.14;
      double area=pi*radius*radius;
}
void main(){
   Cycle ci;
   ci.radius=2;
   cout<<ci.area<<endl;//此时输出的是随机值,因为当构建Cycle对象时,就已经给area初始化了
}


3.C语言和C++语言的关系

4.namespace定义(可嵌套)、使用、标准命名空间std、iostream中没有引入std

5.实用性增强(变量定义)、全局变量定义检查、变量类型检查严格(C语言中允许对变量进行二定义,C++不允许)、所有变量和函数定义必须有类型

  1. //在C语言中  
  2. int f();//表示返回值为int,接受任意参数的函数  
  3. int f(void);//表示返回值为int 的无参函数  
  4. //在C++中  
  5. //int f()和int f(void)具有相同的意义,都表示返回值为int的无参函数  
//在C语言中
int f();//表示返回值为int,接受任意参数的函数
int f(void);//表示返回值为int 的无参函数
//在C++中
//int f()和int f(void)具有相同的意义,都表示返回值为int的无参函数


6.register功能增强,c中不能取地址,c++优化

7.struct关键字(c中不是新类型,如果要当做数据类型使用,必须前面加上 struct ),与class功能相同

8.类型加强bool 1个字节,但只有true和false

9.c++中三目运算符 返回变量自身 c中返回的是变量的值 ,因此不能为左值

  1. int main(){  
  2.     int a=10;  
  3.     int b=20;  
  4.     int var=100;  
  5.     var=101;  
  6.     //返回一个最小数,并且给最小数赋值成3  
  7.    //在C语言中,三目运算符是一个表达式,表达式不能做左值,但是可做如下修改,达到跟C++语言相同的效果  
  8.      *(a<b?&a:&b)=3;  
  9.      return 0;  
  10.   
  11. }  
int main(){
    int a=10;
    int b=20;
    int var=100;
    var=101;
    //返回一个最小数,并且给最小数赋值成3
   //在C语言中,三目运算符是一个表达式,表达式不能做左值,但是可做如下修改,达到跟C++语言相同的效果
     *(a<b?&a:&b)=3;
     return 0;

}


const:

1.基础知识(指针变量和它所指向的空间变量是两个不同的概念)

  1. const int a;  
  2. int const b; //一样  
  3.   
  4. const int *c;  //const修饰的是指针所指向的内存空间,不能被修改  
  5. int * const d; //  
  6. const int * const e ;  
 	const int a;
 	int const b; //一样
 
 	const int *c;  //const修饰的是指针所指向的内存空间,不能被修改
 	int * const d; //
 	const int * const e ;

2.c中冒牌货(只读变量,有自己存储空间)

  1. void main(){  
  2.     const int a=10;//好像a是一个常量  
  3.     int *p=NULL;  
  4.     p=(int *)&a;  
  5.     *p=20;//间接赋值  
  6.   
  7. }  
void main(){
    const int a=10;//好像a是一个常量
    int *p=NULL;
    p=(int *)&a;
    *p=20;//间接赋值

}

3.c++中const的符号表实现机制,不同于c语言中的const,c中的const是假的,可通过指针来修改其指向的值

  1. /*解释 
  2. C++编译器对const常量的处理,当碰见常量声明时,在符号表中放入常量,类似于键值对key->value。那有如何解释取地址的问题。 
  3. 编译过程中若发现使用常量则直接以符号表中的值替换。 
  4. 编译过程中若发现对const使用了extern或&操作符,则给对应的常量分配存储空间,但是与符号表没有任何关系,因此,也改变不了const变量的值。 
  5. */  
/*解释
C++编译器对const常量的处理,当碰见常量声明时,在符号表中放入常量,类似于键值对key->value。那有如何解释取地址的问题。
编译过程中若发现使用常量则直接以符号表中的值替换。
编译过程中若发现对const使用了extern或&操作符,则给对应的常量分配存储空间,但是与符号表没有任何关系,因此,也改变不了const变量的值。
*/

4.const常量是由编译器处理的,提供类型检查和作用域检查

5.#define宏定义由预处理器处理,单纯的文本替换,没有作用域这一说

6.const修饰类成员变量(构造函数初始化列表)

7.const修饰类成员函数:修饰的是this指针


引用:

1.引用概念,给变量起一个别名,本质是给内存空间取个别名

2.引用是c++的语法概念、引用的意义(好用)

3.引用本质:有地址、定义时必须初始化,c++编译器内部按照指针常量

4.引用结论: 间接赋值成立的三个条件的后两步合二为一

5.引用使用原则:当用引用时,我们不去关系编译器引用是怎么做的;当分析奇怪的语法现象时,才去考虑c++编译器是怎么做的。

6.函数返回值是引用(若返回栈变量,不能成为其他引用的初始化,此时函数调用后,已经释放掉该栈空间)

7.函数返回值当左值,必须返回一个引用(返回的是变量本身)

  1. #include <iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. int & getNum(){  
  6.     int a = 10;  
  7.     return a;  
  8. }  
  9.   
  10. int main()  
  11. {  
  12.     int x;  
  13.     x = getNum();  
  14.     cout << x << endl;  
  15.     int & y=getNum();//返回的是变量本身,也即a 等价于 int &y=a; y就是a的别名  
  16.     cout << y << endl;  
  17.     getNum() = 100;//此时& 作为变量 作左值,相当于a=100;也即改变了a,同理y也就改变了。y=100  
  18.     cout << y << endl;  
  19.     return 0;  
  20. }  
#include <iostream>

using namespace std;

int & getNum(){
	int a = 10;
	return a;
}

int main()
{
	int x;
	x = getNum();
	cout << x << endl;
	int & y=getNum();//返回的是变量本身,也即a 等价于 int &y=a; y就是a的别名
	cout << y << endl;
	getNum() = 100;//此时& 作为变量 作左值,相当于a=100;也即改变了a,同理y也就改变了。y=100
	cout << y << endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值