程序员人生 网站导航

【C/C++学院】(4)c++开篇/类和对象/命名空间/类型增强/三目运算符/const专题/引用专题/函数增强

栏目:php教程时间:2015-02-06 08:31:23

1.类和对象

成员函数,成员变量,抽象封装的能力。

求圆的面积;

#include <iostream> using namespace std; class circle{ private: double m_r;//成员变量 public: void setR(double r)//成员函数 { m_r = r; } double getR() { return m_r; } double getS() { return 3.14*m_r*m_r; } }; void main() { circle c1; c1.setR(4); cout << "r:" << c1.getR() << "s:" << c1.getS() << endl; c1.setR(5); cout << "r:" << c1.getR() << "s:" << c1.getS() << endl; system("pause"); }

2.命令空间

命名空间;c++对c的扩大。解决标识符冲突。
std::out  :: 域作用符。
#include <iostream> namespace NameSpaceA{ int a = 0; } namespace NameSpaceB{ int a = 1; namespace NameSpaceC{ struct Teacher{ char name[10]; int age; }; } } void main() { using namespace NameSpaceA; printf("NameSpaceA:a=%d ", a); printf("NameSpaceB:a=%d ", NameSpaceB::a); using NameSpaceB::NameSpaceC::Teacher; Teacher t1 = { "aaa", 3 }; printf("t1.name = %s ", t1.name); printf("t1.age = %d ", t1.age); system("pause"); }



3.语法增强

3.1register关键字增强 

int main()
{
    register int a = 0;
    printf("&a = %x ", &a);
    system("pause");
    return 0;
} 

//register关键字 要求编译器让变量a直接放在寄存器里面,速度快

//c语言中 register修饰的变量 不能取地址,但是在c++里面做了内容

register关键字的变化

register关键字要求“编译器”将局部变量存储于寄存器中

C语言中没法获得register变量地址

C++中仍然支持register关键字

C++编译器有自己的优化方式,不使用register也可能做优化

C++中可以获得register变量的地址 

3.2struct类型增强

struct类型的加强:

C语言的struct定义了1组变量的集合,C编译器其实不认为这是1种新的类型

C++中的struct是1个新类型的定义声明

struct Student

{

    char name[100];

    int age;

};

 

int main(int argc, char *argv[])

{

    Student s1 = {"wang", 1};//struct Student s1={};

    Student s2 = {"wang2", 2};    

    return 0;

}


4.3目运算符

#include <iostream> using namespace std; //在c++里面的3目运算符 返回是1个变量 //让表达式做左值 //1 左值 能被放在 = 做值 称为左值 //2 当左值的条件, 这段内存空间可以被你写 int main() { int a = 10; int b = 20; int c = 31; //返回1个最小数 并且给最小数赋值成30 //3目运算符是1个表达式 ,表达式不可能做左值 //让表达式做左值 (a < b ? a : b) = 30;//相当于c中的*((a < b ? &a : &b)) = 30; //在c中编译不过,报错 printf("a = %d, b = %d ", a, b); system("pause"); return 0; }


5.const专题


const 定义的变量, 在c++的编译器中, 做了1个符号表, key <--->value | a<-->10;
修改的时候, 只是修改了重新分配的空间, 对原来的const数据没有造成修改。
而在c中,却可以将const常量进行修改。

6.援用专题

    援用在c++内部是1个常量指针。
type &name <---> type * const name;
援用的本质是c++编译器帮我们做了1个取地址的操作。
#include <iostream> using namespace std; void swap(int &a, int &b) { int c = 0; c = a; a = b; b = c; } void swap2(int *a, int *b) { int c = 0; c = *a; *a = *b; *b = c; } //援用和左值进行绑定的时候 void main() { int a1 = 10; int b1 = 20; swap(a1, b1); printf("a1:%d, b1:%d", a1, b1); system("pause"); }

7.函数增强

7.1内联函数

内联函数的函数体需要和实现写在1起,不能单独声明。
代替带参数的宏,避免宏的副作用。
#include "iostream" using namespace std; #define MYFUNC(a, b) ((a) < (b) ? (a) : (b)) //inline要求关键字, 内联编译 //内联函数的函数体,需要和实现写在1块 inline int myfunc(int a, int b) { return a < b ? a : b; } int main() { int a = 1; int b = 3; //int c = myfunc(++a, b); int c = MYFUNC(++a, b);//===> ((++a) < (b) ? (++a) : (b)); printf("a = %d ", a); //3 printf("b = %d ", b);//3 printf("c = %d ", c); //3 system("pause"); return 0; }

7.2函数重载

函数重载与函数指针的结合;可以添加断电,选择逐语句履行,视察运行效果。
#include "iostream" using namespace std; int func(int x) // int(int a) { return x; } int func(int a, int b) { return a + b; } int func(const char* s) { return strlen(s); } //定义了1个 指针 类型 (指向函数的指针类型) typedef int(*PFUNC)(int a); // int(int a) void main() { PFUNC p = func; int c = p(1); printf("c = %d ", c); system("pause"); }




------分隔线----------------------------
------分隔线----------------------------

最新技术推荐