当前位置:首页 » 编程语言 » C语言重写类

C语言重写类

发布时间: 2022-07-07 19:42:42

1. 新手关于c语言中类(Classes)的问题,求高手!

#include<iostream>
using namespace std;
class X
{
int x; //定义类X的私有实例成员变量x
public:
X() {x=0;} //默认构造函数(无参数),将x初始化为0
X(int xx) {x=xx;} //重载的构造函数,将x初始化为xx
//虚函数,输出x的值,子类可以覆盖(重写)虚函数,从而实现多态
virtual void prt() {cout<<x;}
};
//类Y公共继承自类X,即Y是X的子类
class Y:public X
{
int y; //定义类Y的私有实例成员变量y
public:
//以下两行都是类Y的构造函数,它们都隐式调用了父类X
//的默认构造函数,以初始化父类的实例成员变量x(都初始化成0了)
Y() {y=0;}
Y(int yy) {y=yy;}
//这是覆盖(重写)父类的虚函数prt
void prt() {cout<<y;}
};
int main()
{
//x(10)会调用带一个参数的构造函数X(int xx),创建一个类X的对象x,
//x的成员变量x初始化为10
//z会调用默认构造函数X(),创建一个类X的对象z,
//z的成员变量x初始化为0
//y(11)会调用带一个参数的构造函数Y(int yy)(Y的),创建一个类Y的对象y,
//y的成员变量y初始化为11,同时通过调用父类X的默认构造函数,
//将父类的成员变量x初始化为0
X x(10),z;Y y(11);

//将x赋给z,调用z的成员函数prt,输出显示10
z=x;z.prt();
//将y赋给z,调用z的成员函数prt,输出显示0,
//因为调用的是父类X的prt,显示的是对象z的成员变量x的值
z=y;z.prt();
//以下新加的会输出显示11,
//因为调用的是子类Y的prt,显示的是对象y的成员变量y的值
y.prt();
cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

2. C语言重写隐藏文件

试试把文件属改成可见,再改内容,搞完后再设置成隐藏属性,用函数system(char *)加DOS命令attrib设置文件属性

3. 哪位大神能用c语言 重写opencv 的下面6个函数或者从源码中整理出来,可以编译,运行

去git上面看看源码

//先说一下这个函数吧
//cvNamedWindow
CV_IMPLintcvNamedWindow(constchar*name,intflags){
CV_FUNCNAME("cvNamedWindow");
if(!name)CV_ERROR(CV_StsNullPtr,"NULLname");
HighguiBridge::getInstance().namedWindow(name);
returnCV_OK;
}
//而它又需要HighhuiBridge这个类,它有个单例工厂方法
HighguiBridge&HighguiBridge::getInstance(){
staticHighguiBridgeinstance;
returninstance;
}
//上面2个函数实际调用这2个成员函数
CvWindow*HighguiBridge::namedWindow(cv::Stringname){
CvWindow*window=HighguiBridge::getInstance().findWindowByName(name.c_str());
if(!window)window=createWindow(name);
returnwindow;
}
//创建窗口先是查找有没有已有窗口
CvWindow*HighguiBridge::findWindowByName(cv::Stringname){
autosearch=windowsMap->find(name);
if(search!=windowsMap->end())returnsearch->second;
returnnullptr;
}
//如果没有会用这个函数创建
CvWindow*HighguiBridge::createWindow(cv::Stringname){
CvWindow*window=newCvWindow(name);
windowsMap->insert(std::pair<cv::String,CvWindow*>(name,window));
returnwindow;
}
//创建窗口是CvWindow类
classCvWindow{
public:
CvWindow(cv::Stringname,intflag=CV_WINDOW_NORMAL);
~CvWindow();
/**@briefNOTE:prototype.
.
*/
voidcreateButton(cv::Stringname);
/**@.

.
*/
voidcreateSlider(cv::Stringname,int*val,intcount,CvTrackbarCallback2on_notify,void*userdata);
/**@briefUpdateswindowimage.
@.
Thefunctionupdateswindowimage.-doesnothing.
*/
voipdateImage(CvMat*arr);
/**@(slider).
@paramnameNameofthewindow.
(slider).
nullptr.
*/
CvTrackbar*findTrackbarByName(cv::Stringname);
Page^getPage();
private:
cv::Stringname;
//HoldsimagedatainCVformat
CvMat*imageData;
//
std::map<cv::String,CvTrackbar*>*sliderMap;
//Windowcontentsholder
Page^page;
//
Image^imageControl;
//Containerforsliders
Panel^sliderPanel;
//Containerforbuttons
//TODO:prototype,notavailableviaAPI
Panel^buttonPanel;
//.
//RequiredsinceimageData->
intimageWidth;
//t
staticconstPlatform::String^markupContent;
//DefaultSlidersize,
;
};
//CvWindwo构造函数为
CvWindow::CvWindow(cv::Stringname,intflags):name(name){
this->page=(Page^)Windows::UI::Xaml::Markup::XamlReader::Load(const_cast<Platform::String^>(markupContent));
this->sliderMap=newstd::map<cv::String,CvTrackbar*>();
sliderPanel=(Panel^)page->FindName("cvTrackbar");
imageControl=(Image^)page->FindName("cvImage");
buttonPanel=(Panel^)page->FindName("cvButton");
//.
//,afterthatwecan
//updateothercontrols
imageControl->Loaded+=refnewWindows::UI::Xaml::RoutedEventHandler(
[=](Platform::Object^sender,
Windows::UI::Xaml::RoutedEventArgs^e){
//
for(autoiter=sliderMap->begin();iter!=sliderMap->end();++iter){
iter->second->getSlider()->Width=imageControl->ActualWidth;
}
//
//TODO:implementwhenaddingbuttons
});
}

4. c语言~~有几个常用的自己写的函数,但每次也要重写,应如何处理

把你的函数保存成a.h
每次要用到a{}时,就把a.h放到源文件同目录下,源文件加"include"a.h""即可

5. C语言内存重写和内存遗漏是什么意思什么情况下会发生呢

没怎么听过这个概念,但是我觉得你说的应该是内存溢出和内存泄露这两个问题
内存溢出也就是定义的变量长度不足,内存不够储存数据导致数据超出界限,这通常是由于数据长度判断不严格造成的。好比只定义了一个能装5个苹果的盒子却要装8个苹果,剩下的3个只能放到其他苹果的位置了,其他的苹果就等于是被“重写”了
例子,定义了int a[2]变量,再定义int *p = a,当用p[2] = 0写入数据时,就发生了内存溢出。由于c语言只检查指针是否有效(能读写),这就可能导致指针被赋予一个特殊的值,比如指向程序代码部分,这时候往指针中写入的数据就有可能覆盖原本的命令,而且有可能被程序或者系统运行。还有一种情况就是错误的指针可能意外的修改了其他变量的值,这个通常在结构体变量中发生。
一句话就是溢出的内存
内存泄露就是给指针分配了内存却并未做回收,导致系统一直认为你正在使用这块内存,当不再有指针指向这块内存,也就是无法正常手动回收时,就造成了内存泄露。内存泄露会导致系统可用内存越来越少,直到再无内存可供分配或者程序被终止。由于系统自身代码缺陷而存在的内存泄露,由于除非关机重启,系统一直在运行,会导致泄露的内存一直得不到回收,最终内存耗尽系统崩溃死机

6. C语言,重写strcpy和strcmp

strcpy:
char* strcpy (char* dest, const char* src)
{
char* p = dest; // 复制dest 的副本使用,dest本身要用作返回值
while ((*p++ = *src++) != '\0'); // 逐个复制src串的字符到p串,直到0结束
return dest; // 返回 dest
}

strcmp:
int strcmp (const char* str1, const char* str2)
{
int result;
char ch;
do {
ch = *str1++; // 逐个取 str1 串的字符
result = ch - *str2++; // 逐个与 str1 串的字符比较,结果在result 中
} while (ch != '\0' && result == 0); // 串未结束且结果相等则继续
return result; // 返回结果
}

7. 把C语言用汇编语言重写,用跳转指令和不用跳转指令2种方法,谢谢

不用跳转写这个if有点意思,算数右移+逻辑右移+异或求绝对值,根据结果符号位偏移取地址赋值,用LOOP循环cx赋值为CMP a,b后ZF取反结果得到循环结束条件

8. C语言为什么可以重写标准库函数

这个问题是一个好问题,我之前也没思索过或者尝试过,
首先我们弄清楚一件事,函数声明可以放在任何头文件,实现可以放在任何实现该函数的源文件中,那么就存在一个问题:
编译时,到底优先去使用哪一个,为什么没有把标准库中的函数扩展过来;在windows下标准库被编译成了msvcr120.dll(msvcr100.dll,这里指release版),所以并不是扩展到代码中,而是在调用时动态链接;
而题主在其中自定义文件中实现了该函数,所以编译时找到了该函数的实现,并不会去链接dll(这应该是编译器做的一些工作,确定系统的dll需要加载哪些),所以题主的程序执行时就只有一份fputc了,并不冲突。
题主可以通过快捷键跳转声明就知道了,VS下,点选fputc实现函数按F12跳转到声明,指向的是stdio.h,再按一次跳转到你自己的定义了。Qt的话使用F2。
大概就是这样子了,可追问。

9. 方法重载和重写的区别

Overload是重载的意思,表示在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可,Override是覆盖的意思,也就是重写,它与返回值类型无关,只看参数列表,两者不同主要体现在:目的不同、范围不同、参数不同、多态性不同、返回类型不同。

1、目的不同

overload用于增加程序的可读性(做法不同,但是做的同一事情)。 override用于提供其超级类已经提供的方法的特定实现。

2、范围不同

overload 在相同的类范围内内执行。 override发生在两类具有继承(继承)的关系。

3、参数不同

overload参数必须不同。 override参数必须相同。

4、多态性不同

overload 静态多态,调用的函数在编译时被选中。 override 是运行时多态性的。

5、返回类型不同

overload中可以相同或不同。但你必须改变参数。 override必须是相同的或协变的。

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:433
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:557
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:743
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:537
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:147
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:240
java驼峰 发布:2025-02-02 09:13:26 浏览:652
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:538
linuxadobe 发布:2025-02-02 09:09:43 浏览:212
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:726