小编Raj*_*esh的帖子

fstream 的默认模式

我正在查看 SO post C++ file stream open patterns ambiguity。我想知道fstream的默认文件打开模式。其中一个回答说,

以上暗示的是,以下代码使用完全相同的打开标志 fstream f("a.txt", ios_base::in | ios_base::out); 打开文件。ifstream g("a.txt", ios_base::out); ofstream h("a.txt", ios_base::in);

所以如果我理解正确的话,如果我创建 fstream 的对象,我应该能够读或写。

但下面的代码不会将任何数据写入文件

fstream testFile1;
testFile1.open("text1.txt");
testFile1<<"Writing data to file";
testFile1.close();
Run Code Online (Sandbox Code Playgroud)

但是,如下所示的添加模式会创建带有数据“将数据写入文件”的文本文件

testFile1.open("text1.txt", ios::out);
Run Code Online (Sandbox Code Playgroud)

那么默认模式是否是实现定义的?我正在使用 TDM-GCC-64 工具链。

c++ file-handling tdm-gcc

6
推荐指数
2
解决办法
5252
查看次数

如果不使用虚函数,则使用指向派生类的基类指针的任何目的

我正在查看几篇关于使用基类指针指向派生类对象的好处的帖子(如下所列)。但大多数情况下,虚函数才是使用基类指针的最终目的。我对其中一些帖子添加了评论,但我想由于这些帖子已经过时,因此没有收到回复。现在我的问题是,如果我们不使用虚函数概念,在其他情况下使用基类指针是否有任何目的?

在下面的代码中,

pEmp->计算TotalSalary

由于缺少虚函数,因此调用基类函数。这是预期的行为。

#include <iostream>
using namespace std;
class Employee
{
public:

    void computeTotalSalary ()
    {
        cout<<"Computing Employee Salary in Base Class:"<<endl;
    }
};

class TeachingStaff : public Employee
{
public:
    // Override the function

    void computeTotalSalary ()
    {
        cout<<"Computing Teacher's Salary in Sub class: "<<endl;
    }
};

int main()
{
    TeachingStaff *pTeacher = new TeachingStaff() ;
    pTeacher->computeTotalSalary();
    Employee *pEmp;
    pEmp = pTeacher;
    pEmp->computeTotalSalary();
    pTeacher->Employee::computeTotalSalary();
}
Run Code Online (Sandbox Code Playgroud)

链接: 1.派生类为何使用基类指针

  1. 基类指针可以指向派生类对象。为什么反之则不然呢?

  2. 在C++中将派生类指针分配给基类指针

c++ inheritance

5
推荐指数
1
解决办法
2319
查看次数

使用scanf读取uint8_t数据

我写了一个简单的C程序来读取小时和分钟,然后将它们一起添加.但它没有被添加,currentHrMin只打印分钟的值.但是如果getCurrentDate(&dateParams)在打印后调用currentHrMin,则没有问题.我无法找出我的代码有什么问题.可能是一个愚蠢的问题.我正在使用MinGW C编译器.

#include <stdio.h>
#include <stdint.h>

#define BCD_TO_DEC(num) ((((num)&0xF0)>>4)*10+((num)&0x0F))
#define DEC_TO_BCD(num) ((((num)/10) << 4) | ((num) % 10))


struct RTC_TIME
{
    uint8_t hours;
    uint8_t minutes;
    uint8_t seconds;
    uint8_t twelveHourFormat:1; //1 = 12 hour format, 0=24 hour format.
    uint8_t AM_0_PM_1:1;
    uint8_t hours24Format;
    uint8_t alarm1State:1;
    uint8_t alarm2State:1;
};

struct RTC_DATE
{
    uint8_t date;
    uint8_t month;
    uint8_t dayOfWeek;
    uint8_t year;
};


void getCurrentTime(struct RTC_TIME* time)
{
    printf("Enter Hour: ");
    scanf("%d",&(time->hours));
    printf("Enter Min: ");
    scanf("%d",&(time->minutes));
}

void getCurrentDate(struct …
Run Code Online (Sandbox Code Playgroud)

c struct scanf bit

4
推荐指数
1
解决办法
1868
查看次数

将函数指针分配给函数指针数组

在下面的代码中,我试图将函数指针分配给函数指针数组。我收到错误消息

错误:初始值设定项元素不是常数,然后一个注释说“stateTable2[1]”接近初始化。

在 中main,我尝试将函数指针分配给另一个函数指针,但没有问题。

void function1 (void) // Function definition
{

}

void function2 (void) // Function definition
{

}

void (*fptr)(void) = function2;

void (*stateTable2[]) (void) = {function1,fptr};

int main()
{
    void(*fp)(void) = fptr;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays static initialization function-pointers

4
推荐指数
1
解决办法
243
查看次数

函数指针声明和函数定义在一起

我在其中一个旧文件中看到了一段代码.

void (*const m_exec[N_EXECS])(void) =
   {
       #define PROCESS_DEF_TIMED(name) name,   // defines macro for use in proclist.h
       #define PROCESS_TIMED                   // define switch for section in proclist.h
       #include "proclist.h"
       #undef PROCESS_TIMED                    // undefine switch
       #undef PROCESS_DEF_TIMED                // undefines macro
   }; 
Run Code Online (Sandbox Code Playgroud)

我无法理解这段代码的含义.这是一个带声明和函数定义的函数指针吗?但是,如果我尝试声明类似的函数指针,我得到编译错误

void (*voidFptr)(void) =
{
    printf("Hello\n");
}
Run Code Online (Sandbox Code Playgroud)

那么#define在这里是什么?为什么这是我不确定的功能.

c mingw codeblocks

3
推荐指数
1
解决办法
158
查看次数

忽略C表达式中的空格的规则

在许多C表达式中,忽略空格(例如:在**b的情况下,其中b是指针,忽略空格).但在少数情况下,他们不容忽视.我们在x +++ y和相关(操作符中的c ++空间,规则是什么)上获得了很多SO帖子.我知道x +++ y的确意味着(x ++)+ Y,因为postfix的优先级更高.x ++ + y和x + ++ y之间也存在差异.因此,在c表达式中并不总是忽略空格.我想知道表达式中空格的规则是什么.在哪里定义?什么时候不被忽视?是两个运算符一个接一个地特别增加/减少运算符的时候?

c whitespace

3
推荐指数
1
解决办法
50
查看次数

C++中类名的Access Modifier

我在http://www.geeksforgeeks.org/inheritance-in-c/中查看了继承概念.我对作者写的几句话很困惑.在一个地方作者说

如果我们从公共基类派生一个子类.然后基类的公共成员将在派生类中公开.......

这意味着我们在C++中有类似公共类的东西吗?文章下面的表格也表明有一个公共/受保护类的概念. 在此输入图像描述

我查看了其他一些SO帖子(在派生类声明中使用"Public"?)并且没有找到对Public,Private或protected class本身的引用.帖子/sf/ask/335483011/谈论公开,但是通过头文件.

c++ inheritance

3
推荐指数
1
解决办法
970
查看次数

C++中signed char的负值cout

C++如何处理有问题的char的负值?行为是用C++ 11标准定义的吗?我正在使用MinGW C++ 11编译器.看起来有符号值通过添加256转换为无符号类型,然后打印扩展的ASCII字符.

signed char a=-35;
std::cout<<a;
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++11

3
推荐指数
1
解决办法
754
查看次数

与printf中的序列点一起使用时,i的未定义值

我在看序列点操作.在下面的代码中,i的值打印为1.但是我收到"在i上操作未定义"的警告消息.我当时认为虽然&运算符不是序列点,但是函数调用printf被认为是一个序列点,因此在%d期间我被完全评估.但为什么操作未定义?

int i = 0;
if((i++) & printf("i = %d\n",i))
{
    // Something
}
else
{
    // some code here
}
Run Code Online (Sandbox Code Playgroud)

c mingw

3
推荐指数
1
解决办法
61
查看次数

警告:迭代5u调用未定义的行为[-Waggressive-loop-optimizations]

在下面的代码中,我不确定为什么我会收到警告:当我评论printf("")时,迭代5u调用未定义的行为[-Waggressive-loop-optimizations]; for循环中的语句.printf语句如何对此警告做出贡献?

其次,这段代码无限循环.进入while循环时,我知道数组索引超出限制.但是当我消极时,循环应该已经终止.但没有发生.如果i--在进入while循环之前完成,则没有问题.如果索引超出范围,我应该只是将垃圾结果正确.但为何无穷无尽!

 int main (void)
{
   int a[]={4,6,8,2,7};
   int i=0;
   int size = sizeof(a)/sizeof(a[0]);

  for(i=0;i<size;i++)
   {
      // printf(" ");
   }
 // i--; // doing i-- works fine.
   while(i>=0)
    {
      printf("%d\t",a[i]);
      i--;
    }

  return(0);

}
Run Code Online (Sandbox Code Playgroud)

c mingw

2
推荐指数
1
解决办法
9105
查看次数