C++老版课程的知识总结(1)

class circle
{
public:

	double r;

	double pi = 3.1415926;
	double area = pi*r*r;
	
};

int main()
{
	circle pi;
	cout << "请输入area" << endl;
	cin >> pi.r;

	cout << pi.area << endl;	//乱码
	
	system("pause");
	return 0;
}

总结: 从内存四区的角度,解释为什么会出现乱码

初始化的时候已经执行了,当时r是一个随机值,结果造成area变量是一个乱码。

当c1.area的时候,只是从变量所标示的内存空间中拿值;并没有执行pi*r*r

=========================================================================

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:

1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下: std::cout << std::hex << 3.4 << std::endl;

2、使用using关键字。 using std::cout; using std::endl; using std::cin; 以上程序可以写成 cout << std::hex << 3.4 << endl;

3、最方便的就是使用using namespace std; 例如: using namespace std;这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写: cout <<hex << 3.4 << endl

在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。

#include "iostream"
using namespace std;

//1文件中iostream 没有引入标准的 std ; 需要我们程序员手工的写
//2 如果不写 using namespace std; 需要显示的引入std

void main31()
{
	std::cout<<"namespace test"<<std::endl;

	system("pause");
}

//3 定义命名空间

namespace  namespaceA
{
	int a = 10;
}

namespace  namespaceB
{
	int a = 20;
	namespace namespaceC
	{
		struct Teacher
		{
			char name[32];
			int age ;
		};
	}
}

//4 使用命名空间
//
void main()
{
	using namespace namespaceA;
	using namespace namespaceB;
	cout<<namespaceA::a<<endl;
	cout<<namespaceB::a<<endl;

	//显示的, 写全
	{
		//namespaceB::namespaceC::Teacher t1;
		//t1.age = 33;
	}
	
	using namespaceB::namespaceC::Teacher  ;
	Teacher t2;
	t2.age = 36;
	
	system("pause");
}

=========================================================================

register关键字的变化

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

C语言中无法取得register变量地址

在C++中依然支持register关键字,C++编译器有自己的优化方式,不使用register也可能做优化,C++中可以取得register变量的地址。C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。

=========================================================================

struct类型的加强:

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

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

struct Student
{
    char name[100];
    int age;
};

int main(int argc, char *argv[])
{
    Student s1 = {"wang", 1};
    Student s2 = {"wang2", 2};    
    return 0;
}

=========================================================================

C++在C语言的基本类型系统之上增加了bool,bool类型只有true(非0)和false(0)两个值,C++编译器会在赋值时将非0值转换为true,0值转换为false。

=========================================================================

 int main()
 {
     int a = 10;
     int b = 20;
     (a < b ? a : b) = 30;
     printf("a = %d, b = %d\n", a, b);
     system("pause");
     return 0;
 }

1)C语言返回变量的值 C++语言是返回变量本身,C语言中的三目运算符返回的是变量值,不能作为左值使用。

2)C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方。

注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用:(a < b ? 1 : b )= 30;

=========================================================================

 int main()
 {
     int f = 0;
     const int a = 1;
     int const b = 1;
     const int* c;
     int* const d = &f;
     const int* const e = &a;

     return 0;
 }
//第一个第二个意思一样 代表一个常整形数
//第三个 c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改)
//第四个 d 常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)
//第五个 e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改)

int setTeacher_err( const Teacher *p)
//Const修改形参的时候,在利用形参不能修改指针所向的内存空间
void main()
{
	const int a = 10;

	int *p = NULL;
	p = (int *)&a;

	*p = 20;

	printf("a:%d \n", a);
	printf("*p:%d \n", *p);
	system("pause");
}
//c语言的环境中 a打印结果为20
//c++语言的环境中 a打印结果为10 *p结果为20 证明了符号表的存在

C++编译器对const常量的处理,当碰见常量声明时,在符号表中放入常量,编译过程中若发现使用常量则直接以符号表中的值替换,编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C),C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。

C++中的const常量与宏定义不同:const常量是由编译器处理的,提供类型检查和作用域检查;宏定义由预处理器处理,单纯的文本替换。

C语言中const变量是只读变量,有自己的存储空间。

C++中的const常量,可能分配存储空间,也可能不分配存储空间 ,当const常量为全局,并且需要在其它文件中使用(extern),会分配存储空间,当使用&操作符,取const常量的地址时,会分配存储空间,当const int &a = 10; const修饰引用时,也会分配存储空间。

=========================================================================

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值