您的位置:首页 > 编程语言 > C语言/C++

C++学习基础篇一:c++对c的扩展

2016-02-17 18:41 288 查看
问题抛出:

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

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

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

c++对c的扩展:

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

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

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++不允许)、所有变量和函数定义必须有类型

//在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中返回的是变量的值 ,因此不能为左值

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.基础知识(指针变量和它所指向的空间变量是两个不同的概念)

const int a;
int const b; //一样

const int *c;  //const修饰的是指针所指向的内存空间,不能被修改
int * const d; //
const int * const e ;

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

void main(){
const int a=10;//好像a是一个常量
int *p=NULL;
p=(int *)&a;
*p=20;//间接赋值

}


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

/*解释
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.函数返回值当左值,必须返回一个引用(返回的是变量本身)

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: