c++记录实验出现的错误(5.6~6.14)

目录

5_6

一、语法错:调用函数时head部分未正确引入(未加'()')

二、逻辑错:在类的使用中,实参传给形参,形参再传给私有数据成员 

5_13 

 一、语法错:string类定义与使用错误

string是一个特殊的对象,属于引用类型

☆string类的引用要用“”,否则会被系统认定为变量

正确定义并初始化string类型变量:

5_18 

 一、逻辑错:cin>>数组输入错误

①若是采用for循环输入——每次只输入一个字符和一个回车,这个回车只被当作是你输入结束,而不会被存到数组里。

②若是采用cin直接输入——把a视为字符数组,结尾会自动补一个'\0'。

二、语法错:类的定义顺序错误

 要使该类外其他类的函数能访问本类内数据成员,则需要在类的定义之前对函数所在类进行定义。

6_2 

 一、语法错:初始化列表只能在构造函数中使用

初始化列表

6_10 

 一、语法错:静态数据成员类内定义类外初始化

​编辑 (小错误:类外定义成员函数或数据成员时不能指定存储类)​编辑

【另】①static初始一次,全局可用;②局部作用域中静态变量的特点(static):当一个函数返回后,下一次调用时,该变量还会保持返回的值,即使发生了递归调用,也不会为该变量建立新的副本,该变量会在各次调用期间共享。

6_14

 一、语法错:默认实参不在形参列表的结尾

 其_他

①main函数莫要写成mian

②class类{}后要加;


 C++程序开发过程

  • 编译 cpp->obj    某个源文件中出现语法错误(传参错误)
  • 连接 obj->exe   不同源文件之间有冲突(函数名相同导致的重复定义) 

5_6

一、语法错:调用函数时head部分未正确引入(未加'()')

【题目】定义一个Circle类,计算圆的面积。(此题取整)

#include<iostream>
using namespace std;

class Circle
{
public:
	Circle(int r)
	{
		r=radius;  //错误2:赋值方向错误
	}
	int get_area();
private:
	int radius;
};

inline double Circle::get_area()
{
	return 2*3*radius;
}

int main()
{
	int radius;
	cout<<"please enter the radius: ";
	cin>>radius;
	Circle mycircle(radius);
	cout<<"caculate the area: "<<mycircle.get_area<<endl;  //错误1:函数调用时形式不对
	return 0;
}

错误①:运行后会出现错误警告——原因是get_area后没有括号,函数调用语法错

C:\Users\Administrator\Desktop\5_6.cpp(28) : warning C4761: integral size mismatch in argument; conversion supplied

 mycircle.get_area() 要有括号,否则得到的结果都为1 

二、逻辑错:在类的使用中,实参传给形参,形参再传给私有数据成员 

如上题及程序 

错误②:代入简单数据后运行后发现

 

???

在定义circle类时构造函数的形参传给私有数据成员,赋值方向相反会造成什么情况?

 

 main函数中的radius并没有传给Circle类中的私有数据成员,至于为什么结果如此,有待考究。

5_13 

 一、语法错:string类定义与使用错误

string是一个特殊的对象,属于引用类型

string类初始化(字符串类型初始化)String类型的变量结尾都有’\0’

 string类构造函数

string(const char*s

☆string类的引用要用“”,否则会被系统认定为变量

如下例题:

更正后: 

正确定义并初始化string类型变量:

#include<iostream>
#include<string>
using namespace std;

void main()
{
	string color="";
	color="white";
	cout<<color<<endl;
}

5_18 

 一、逻辑错:cin>>数组输入错误

【题目】输入一个数,利用数组找出个位数字

【思路】利用数组找出输入数的个位数并输出

【错误】数组a是int型,for循环条件无法成立(a[i]!='\0'),因此无法输入我们想要的数。

 

既然如此,采用字符数组来判断。

 按照预期,是输入一串数字,敲回车后即可显示出所要的结果,但运行后发现不是这样,经过调试后发现回车后并没有给输入数字的后面补上'\0',如上图,输入两个数后发现a[2]!='\0'。

①若是采用for循环输入——每次只输入一个字符和一个回车,这个回车只被当作是你输入结束,而不会被存到数组里。

②若是采用cin直接输入——把a视为字符数组,结尾会自动补一个'\0'。

 调试如上,'\0'——空字符,程序运行及代码如下:

#include<iostream>
using namespace std;
int main()
{
	char a[10];
	int i;
	cin>>a[0];//仅输入a[0]
	cout<<"a[0]="<<a[0]<<endl;
	cin>>a;//数组名代表首元素地址,从a代表的地址开始读取直到结束
	cout<<endl;
	for(i=0;a[i]!='\0';i++)
	{
		cout<<"for循环"<<endl;//判断for循环次数
	}
	cout<<endl<<"for循环次数:"<<i<<endl;
	cout<<"个位数字为:"<<a[i-1]<<endl;
	return 0;
}

二、语法错:类的定义顺序错误

 要使该类外其他类的函数能访问本类内数据成员,则需要在类的定义之前对函数所在类进行定义。

 【题目】定义类X、Y、Z,函数h(X *),满足:类X有私有成员i,Y的成员函数g(X *)是X的友元函数,实现对X的成员i加1;类Z是类X的友元类,其成员函数f(X *)实现对X的成员i加5;函数h(X *)是X的友元函数,实现对X的成员i加10。在一个文件中定义和实现类,在另一个文件中实现main()函数。(考察:多文件结构与类的使用

//5_18(1).cpp  把类的声明和定义放在同一个文件里
#include <iostream>
using namespace std;

class X;
class Y;

class Y 
{         //Y的定义要放在前面,否则会造成无法引用Y中的成员函数g(X)
public:
	void g(X&);
};

class X 
{
public:
	X(){i = 0;};     //X的构造函数
	friend void Y::g(X&);//友元函数记得标明作用域
	friend class Z;
	friend void h(X&);
	void showi();
private:
	int i;
};

void X::showi()
{
	cout << "i :" << i << endl;
}

//实现Y中成员函数g(X*)
void Y::g(X& x)
{
	x.i++;
}

class Z 
{
public:
	void f(X&);
};

void Z::f(X& x)   //实现Z中的f()
{
	x.i += 5;
}

void h(X& x)    //实现h()
{
	x.i += 10;
}
//5_18(2).cpp  main函数所在源文件
#include<iostream>
#include"5_18(1).cpp"
using namespace std;

int main()
{
	X x1;   //令x1中i为0
	Y y1;
	Z z1;

	x1.showi();
	y1.g(x1);

	x1.showi();
	z1.f(x1);
	x1.showi();

	h(x1);
	x1.showi();

	return 0;
}

 正确程序如上(√) 

组建错误点提示如下:(只需把对class Y的定义放在前面即可)

--------------------Configuration: 5_18 - Win32 Debug--------------------
Compiling...
5_18(1).cpp
D:\c&c++相关资料\visual c++文件\5_18(1).cpp(12) : error C2027: use of undefined type 'Y'
        D:\c&c++相关资料\visual c++文件\5_18.cpp(5) : see declaration of 'Y'
D:\c&c++相关资料\visual c++文件\5_18(1).cpp(31) : error C2248: 'i' : cannot access private member declared in class 'X'
        D:\c&c++相关资料\visual c++文件\5_18(1).cpp(17) : see declaration of 'i'
执行 cl.exe 时出错.

5_18(1).exe - 1 error(s), 0 warning(s)

6_2 

 一、语法错:初始化列表只能在构造函数中使用

初始化列表

作用:

C++提供了初始化列表语法,用来初始化属性

语法:构造函数():属性1(值1),属性2(值2)... {}

//正确书写形式
class X
{
public:
  X(int a,int b):a(a),b(b){};//X括号里的a,b是形参
private:
  int a,b;//初始化列表中括号外的a,b和private属性的数据成员是一致的
}

如图错误——初始化列表仅能在构造函数中使用,其他函数不可用。 

6_10 

 一、语法错:静态数据成员类内定义类外初始化

 (小错误:类外定义成员函数或数据成员时不能指定存储类)

 

类的静态成员知识点验证详情见(6_12处)c++课本例题及知识点验证(6_12处)https://blog.csdn.net/AWMsilverL/article/details/125153290?spm=1001.2014.3001.5501

具体代码如下:

#include<iostream>
#include<string>
using namespace std;
//通过录入的信息记录cat的数量
class CAT
{
public:
	CAT(int weight, string color) :weight(weight), color(color) { count++; }
	static void showcount()
	{
		cout << "there are " << count << " cats here." << endl;
	}
	~CAT() { count--; }
private:
	int weight;
	string color;
	static int count; //错误——static静态数据类型的变量 类内定义类外初始化;
};

int CAT::count = 0;

int main()
{
	CAT mycat[] = { CAT(15,"white"),CAT(12,"black"),CAT(14,"orange")}; //注意string类型的变量在定义时要加“”
	CAT::showcount();
	return 0;
}

【另】①static初始一次,全局可用;②局部作用域中静态变量的特点(static):当一个函数返回后,下一次调用时,该变量还会保持返回的值,即使发生了递归调用,也不会为该变量建立新的副本,该变量会在各次调用期间共享。

6_14

 一、语法错:默认实参不在形参列表的结尾

带默认形参值的函数讲解https://blog.csdn.net/AWMsilverL/article/details/125284514?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125284514%22%2C%22source%22%3A%22AWMsilverL%22%7D&ctrtid=XlOIk

 其_他

①main函数莫要写成mian

②class类{}后要加;


更新于2022_5_6

更新于2022_5_13

更新于2022_5_18

更新于2022_6_2

更新于2022_6_10

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注意:由于上传大小限制,此电子书分为两个压缩包,此压缩包part1为第一部分,需下载part2后同时进行解压!!!! 《Visual C++2010入门经典(第5版)》:使用visual C++ 2010支持的两种C++语言技术讲述C++编程的基础知识。 分享c++程序的错误查找技术,介绍程序调试的通用准则。 讨论每一个windows应用程序的结构和基本元素。 举例说明如何用mfc开发本地windows应用程序。 指导读者用C++C++/Cli设计和创建具体的windows应用程序。 提供了大量可以工作的示例和练习,旨在帮助读者掌握编程技巧。 目录 第1章 使用visual c++ 2010编程 1 1.1 .net framework 1 1.2 clr 2 1.3 编写c++应用程序 3 1.4 学习windows编程 4 1.4.1 学习c++ 4 1.4.2 c++标准 5 1.4.3 属性 5 1.4.4 控制台应用程序 5 1.4.5 windows编程概念 6 1.5 集成开发环境简介 7 1.5.1 编辑器 8 1.5.2 编译器 8 1.5.3 链接器 8 1.5.4 库 8 1.6 使用ide 8 1.6.1 工具栏选项 9 1.6.2 可停靠的工具栏 10 1.6.3 文档 11 1.6.4 项目和解决方案 11 1.6.5 设置visual c++ 2010的选项 23 1.6.6 创建和执行windows应用程序 23 1.6.7 创建windows forms应用程序 26 1.7 小结 27 1.8 本章主要内容 28 第2章 数据、变量和计算 29 2.1 c++程序结构 29 2.1.1 main()函数 36 2.1.2 程序语句 36 2.1.3 空白 38 2.1.4 语句块 38 2.1.5 自动生成的控制台程序 39 2.2 定义变量 40 2.2.1 命名变量 40 2.2.2 声明变量 41 2.2.3 变量的初始值 42 2.3 基本数据类型 42 2.3.1 整型变量 43 2.3.2 字符数据类型 44 2.3.3 整型修饰符 45 2.3.4 布尔类型 46 2.3.5 浮点类型 46 2.3.6 字面值 47 2.3.7 定义数据类型的同义词 48 2.3.8 具有特定值集的变量 49 2.4 基本的输入/输出操作 50 2.4.1 从键盘输入 50 2.4.2 到命令行的输出 50 2.4.3 格式化输出 51 2.4.4 转义序列 52 2.5 c++中的计算 54 2.5.1 赋值语句 54 2.5.2 算术运算 55 2.5.3 计算余数 59 2.5.4 修改变量 60 2.5.5 增量和减量运算符 60 2.5.6 计算的顺序 63 2.6 类型转换和类型强制转换 64 2.6.1 赋值语句中的类型转换 65 2.6.2 显式类型转换 65 2.6.3 老式的类型强制转换 66 2.7 auto关键字 66 2.8 查看类型 67 2.9 按位运算符 67 2.9.1 按位and运算符 68 2.9.2 按位or运算符 69 2.9.3 按位eor运算符 71 2.9.4 按位not运算符 71 2.9.5 移位运算符 71 2.10 lvalue和rvalue 73 2.11 了解存储时间和作用域 74 2.11.1 自动变量 74 2.11.2 决定变量声明的位置 76 2.11.3 全局变量 77 2.11.4 静态变量 80 2.12 名称空间 80 2.12.1 声明名称空间 81 2.12.2 多个名称空间 82 2.13 c++/cli编程 84 2.13.1 c++/cli特有的基本数据类型 84 2.13.2 命令行上的c++/cli输出 87 2.13.3 c++/cli特有的功能—— 格式化输出 88 2.13.4 c++/cli的键盘输入 91 2.13.5 使用safe_cast 92 2.13.6 c++/cli枚举 92 2.14 查看c++/cli类型 96 2.15 小结 97 2.16 练习 97 2.17 本章主要内容 98 第3章 判断和循环 101 3.1 比较数据值 101 3.1.1 if语句 102 3.1.2 嵌套的if语句 104 3.1.3 嵌套的if-else语句 107 3.1.4 逻辑运算符和表达式 109 3.1.5 条件运算符 112 3.1.6 switch语句 113 3.1.7 无条件转移 116 3.2 重复执行语句块 117 3.2.1 循环的概念 117 3.2.2 for循环的变体 119 3.2.3 while循环 126 3.2.4 do-while循环 128 3.2.5 嵌套的循环 129 3.3 c++/cli编程 132 3.4 小结 137 3.5 练习 138 3.6 本章主要内容 138 第4章 数组、字符串和指针 139 4.1 处理多个相同类型的数据值 139 4.1.1 数组 140 4.1.2 声明数组 140 4.1.3 初始化数组 143 4.1.4 字符数组和字符串处理 144 4.1.5 多维数组 147 4.2 间接数据访问 150 4.2.1 指针的概念 150 4.2.2 声明指针 150 4.2.3 使用指针 152 4.2.4 初始化指针 152 4.2.5 sizeof操作符 158 4.2.6 常量指针和指向常量的指针 159 4.2.7 指针和数组 161 4.3 动态内存分配 168 4.3.1 堆的别名—— 空闲存储器 168 4.3.2 new和delete操作符 168 4.3.3 为数组动态分配内存 169 4.3.4 多维数组的动态分配 171 4.4 使用引用 172 4.4.1 引用的概念 172 4.4.2 声明并初始化lvalue引用 172 4.4.3 声明并初始化rvalue引用 173 4.5 字符串的本地c++库函数 174 4.5.1 查找以空字符结尾的字符串的长度 174 4.5.2 连接以空字符结尾的字符串 174 4.5.3 复制以空字符结尾的字符串 176 4.5.4 比较以空字符结尾的字符串 177 4.5.5 搜索以空字符结尾的字符串 177 4.6 c++/cli编程 179 4.6.1 跟踪句柄 180 4.6.2 clr数组 181 4.6.3 字符串 195 4.6.4 跟踪引用 203 4.6.5 内部指针 204 4.7 小结 206 4.8 练习 206 4.9 本章主要内容 207 第5章 程序结构(1) 209 5.1 理解函数 209 5.1.1 需要函数的原因 210 5.1.2 函数的结构 210 5.1.3 使用函数 213 5.2 给函数传递实参 216 5.2.1 按值传递机制 216 5.2.2 给函数传递指针实参 217 5.2.3 给函数传递数组 219 5.2.4 给函数传递引用实参 222 5.2.5 使用const修饰符 224 5.2.6 rvalue引用形参 225 5.2.7 main()函数的实参 227 5.2.8 接受数量不定的函数实参 229 5.3 从函数返回值 231 5.3.1 返回指针 231 5.3.2 返回引用 233 5.3.3 函数中的静态变量 236 5.4 递归函数调用 238 5.5 c++/cli编程 240 5.5.1 接受数量可变实参的函数 241 5.5.2 main( )的实参 242 5.6 小结 243 5.7 练习 243 5.8 本章主要内容 244 第6章 程序结构(2) 245 6.1 函数指针 245 6.1.1 声明函数指针 246 6.1.2 函数指针作为实参 249 6.1.3 函数指针的数组 250 6.2 初始化函数形参 250 6.3 异常 252 6.3.1 抛出异常 253 6.3.2 捕获异常 254 6.3.3 mfc中的异常处理 255 6.4 处理内存分配错误 256 6.5 函数重载 257 6.5.1 函数重载的概念 258 6.5.2 引用类型和重载选择 260 6.5.3 何时重载函数 260 6.6 函数模板 261 6.7 使用decltype操作符 263 6.8 使用函数的示例 265 6.8.1 实现计算器 265 6.8.2 从字符串中删除空格 268 6.8.3 计算表达式的值 268 6.8.4 获得项值 270 6.8.5 分析数 271 6.8.6 整合程序 274 6.8.7 扩展程序 275 6.8.8 提取子字符串 277 6.8.9 运行修改过的程序 279 6.9 c++/cli编程 279 6.9.1 理解泛型函数 280 6.9.2 clr版本的计算器程序 285 6.10 小结 290 6.11 练习 291 6.12 本章主要内容 292 第7章 自定义数据类型 293 7.1 c++中的结构 293 7.1.1 结构的概念 294 7.1.2 定义结构 294 7.1.3 初始化结构 294 7.1.4 访问结构的成员 295 7.1.5 伴随结构的智能感知帮助 298 7.1.6 rect结构 299 7.1.7 使用指针处理结构 300 7.2 数据类型、对象、类和实例 301 7.2.1 类的起源 303 7.2.2 类的操作 303 7.2.3 术语 303 7.3 理解类 304 7.3.1 定义类 304 7.3.2 声明类的对象 305 7.3.3 访问类的数据成员 305 7.3.4 类的成员函数 307 7.3.5 成员函数定义的位置 309 7.3.6 内联函数 309 7.4 类构造函数 310 7.4.1 构造函数的概念 311 7.4.2 默认的构造函数 312 7.4.3 在类定义中指定默认形参值 314 7.4.4 在构造函数中使用初始化列表 316 7.4.5 声明显式的构造函数 317 7.5 类的私有成员 318 7.5.1 访问私有类成员 320 7.5.2 类的友元函数 321 7.5.3 默认复制构造函数 323 7.6 this指针 325 7.7 类的const对象 327 7.7.1 类的const成员函数 327 7.7.2 类外部的成员函数定义 328 7.8 类对象的数组 329 7.9 类的静态成员 331 7.9.1 类的静态数据成员 331 7.9.2 类的静态函数成员 334 7.10 类对象的指针和引用 334 7.10.1 类对象的指针 334 7.10.2 类对象的引用 337 7.11 c++/cli编程 338 7.11.1 定义值类类型 339 7.11.2 定义引用类类型 344 7.11.3 定义引用类类型的复制构造函数 346 7.11.4 类属性 346 7.11.5 initonly字段 358 7.11.6 静态构造函数 360 7.12 小结 360 7.13 练习 360 7.14 本章主要内容 361 第8章 深入理解类 363 8.1 类析构函数 363 8.1.1 析构函数的概念 363 8.1.2 默认的析构函数 364 8.1.3 析构函数与动态内存分配 366 8.2 实现复制构造函数 369 8.3 在变量之间共享内存 370 8.3.1 定义联合 371 8.3.2 匿名联合 372 8.3.3 类和结构中的联合 372 8.4 运算符重载 373 …… 第9章 类继承和虚函数 第10章 标准模板库 第11章 调试技术 第12章 windows编程的概念 第13章 多核编程 第14章 使用mfc编写windows程序 第15章 处理菜单和工具栏 第16章 在窗口中绘图 第17章 创建文档和改进视图 第18章 使用对话框和控件 第19章 存储和打印文档 第20章 编写自己的dll
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值