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.易犯错误模型(引入成员函数的必要性)
3.C语言和C++语言的关系
4.namespace定义(可嵌套)、使用、标准命名空间std、iostream中没有引入std
5.实用性增强(变量定义)、全局变量定义检查、变量类型检查严格(C语言中允许对变量进行二定义,C++不允许)、所有变量和函数定义必须有类型
6.register功能增强,c中不能取地址,c++优化
7.struct关键字(c中不是新类型,如果要当做数据类型使用,必须前面加上 struct ),与class功能相同
8.类型加强bool 1个字节,但只有true和false
9.c++中三目运算符 返回变量自身 c中返回的是变量的值 ,因此不能为左值
const:
1.基础知识(指针变量和它所指向的空间变量是两个不同的概念)
2.c中冒牌货(只读变量,有自己存储空间)
3.c++中const的符号表实现机制,不同于c语言中的const,c中的const是假的,可通过指针来修改其指向的值
4.const常量是由编译器处理的,提供类型检查和作用域检查
5.#define宏定义由预处理器处理,单纯的文本替换,没有作用域这一说
6.const修饰类成员变量(构造函数初始化列表)
7.const修饰类成员函数:修饰的是this指针
引用:
1.引用概念,给变量起一个别名,本质是给内存空间取个别名
2.引用是c++的语法概念、引用的意义(好用)
3.引用本质:有地址、定义时必须初始化,c++编译器内部按照指针常量
4.引用结论: 间接赋值成立的三个条件的后两步合二为一
5.引用使用原则:当用引用时,我们不去关系编译器引用是怎么做的;当分析奇怪的语法现象时,才去考虑c++编译器是怎么做的。
6.函数返回值是引用(若返回栈变量,不能成为其他引用的初始化,此时函数调用后,已经释放掉该栈空间)
7.函数返回值当左值,必须返回一个引用(返回的是变量本身)
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; }
相关文章推荐
- C++ union 联合
- C语言typedef struct详解
- C语言 const常量讲解
- C语言struct和union构建ARGB颜色通道
- C++中预定义的宏
- C++中,关于#include<***.h>和#include"***.h"的区别
- C语言 预处理三(条件编译--#if)
- c语言实现去除代码中的注释
- gtest(C++单元测试框架)
- C++文件操作与文件流
- C语言typedef详解
- C语言 预处理二(宏定义--#define)
- 碰到的C语言的关于循环取数的方法
- 关于C语言加密的算法
- C++ 模板元中巧用异常让字符串储存在指定类型的tuple中
- 自己用C++写的图像处理软件试用版下载
- c++ 惯用法:定界加锁
- C语言 预处理一(文件包含--#include)
- C++简单实现对象引用计数示例
- 从头再来,C++学习笔记。-01(初窥C++)