C++构造函数报错error LNK2001:"无法解析的外部符号"

C++构造函数报错error LNK2001:"无法解析的外部符号",第1张

已改,看注释

class CEmployee

{

public:

    char m_name[30];

public:

    CEmployee();

    CEmployee(const char nm)

    {

        strcpy(m_name,nm);

    }

};

class CManager:public CEmployee  // CManager写错

{

public :

    float m_salary;

public:

    CManager(const char nm) : CEmployee(nm)  // 需要调用基类构造函数

    {

        m_salary=150000;

    }

    void setSalary(float salary)

    {

        m_salary=salary;

    }

};  // 漏了分号

void main()

{

    CManager aManager("小明");

    printf("%s\t%f\n",aManagerm_name,aManagerm_salary);

}

C++通过子类调用父类函数fun();

子类和父类函数名一样的函数fun,如果参数不一样,不管加不加virtual,当子类调用fun()时,会先在子类中找,找不到会报错。

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。

C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

扩展资料:

C++语言特点:

1、支持继承和重用

在C++现有类的基础上可以声明新类型,这就是继承和重用的思想。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发。新定义的类为子类,成为派生类。它可以从父类那里继承所有非私有的属性和方法,作为自己的成员。

2、支持多态性

采用多态性为每个类指定表现行为。多态性形成由父类和它们的子类组成的一个树型结构。在这个树中的每个子类可以接收一个或多个具有相同名字的消息。当一个消息被这个树中一个类的一个对象接收时,这个对象动态地决定给予子类对象的消息的某种用法。多态性的这一特性允许使用高级抽象。

继承性和多态性的组合,可以轻易地生成一系列虽然类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征。由于多态性,一个对象可有独特的表现方式,而另一个对象有另一种表现方式。

-C++

如果类里写了一个构造函数,编译器就不提供默认构造函数了,要再自己写个默认构造函数就行了。子类从基类继承,如果子类构造时不显示调用基类的构造函数,那么系统会使用基类的默认构造函数,但是因为没有提供默认的构造函数,所以报错了。

可以在构造函数的参数列表中再加入基类的构造函数调用,或者给基类提供一个默认的构造函数。

OnPropertyChanged(字面意思就是属性更改),接着找到MFC的源文件afxpropertygridctrlcpp,定位到OnPropertyChanged这个函数,发现源代码中有一行GetOwner()->SendMessage(AFX_WM_PROPERTY_CHANGED,

GetDlgCtrlID(),

LPARAM(pProp));

我当成这是一个多重继承

子类的构造函数A()调用基类构造函数B()和另一个基类构造函数C()

一般情况 A()中有参数 然后 赋给B()和C()

例如 A(int a,int b):B(a),C(b){}

这样 在构造子类对象时 想对基类的数据成员赋值 就可以用这种方法,节省内存开销 可读性又好

派生类的构造函数

默认情况下

基类的构造函数不被继承;

派生类需要定义自己的构造函数

C++规定

可以用using语句继承基类构造函数;

但是只能初始化从基类继承的成员。

语法形式:

using B::B

 

若不继承基类的构造函数

派生类新增成员:派生类定义构造函数初始化;

继承来的成员:自动调用基类构造函数进行初始化;

派生类的构造函数需要给基类的构造函数传递参数。

 

单继承时构造函数的定义语法:

派生类名::派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表),本类成员初始化列表

{

    //其他初始化;

};

答题不易,请采纳

c++和c语言的区别:1、关键字蓝色标注为C语言关键字,C++继承了C语言的所有关键字,以下红色标注为C++中含有但C语言没有的关键字(根据c++98中提出C++包含63个关键字)。2、源文件区别C语言文件后缀为c,c++原文件名后缀为cpp。如果在创建源文件时什么都不给,默认是cpp。3、返回值不同C语言中,如果一个函数没有指定返回值类型,默认为int类型,并返回一个随机数,一般为0XCCCCCCCC。在C++中,如果函数没有返回值则必须指定为void型,否则编译不能通过。4、参数列表在C语言中,函数没有指定的参数列表时,默认可接收任意多个参数。在C++中,有严格的参数类型检测,没有参数列表的函数,默认为void,不接收任何参数。5、C++支持函数重载,C语言不支持在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。

例如希望交换两个变量的值,这两个变量有多种类型,可以是int、float、char、bool等,我们需要通过参数把变量的地址传入函数内部。

在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似:

void swap1(inta,intb);//交换int变量的值。void swap2(floata,floatb);//交换float变量的值。void swap3(chara,charb);//交换char变量的值。void swap4(boola,boolb);//交换bool变量的值。但在C++中,这完全没有必要。C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。6、指针和引用C语言中函数传参方式有两种:传值和传址。

以传值方式,在函数调用过程中会生成一份临时变量用形参代替,最终把实参的值传递给新分配的临时形参。它的优点是避免了函数调用的副作用,却无法改变形参的值。如果要改变实参的值,只能通过指针传递。指针可以解决问题,但是不安全,因此在C++中引入了引用。7、命名空间在C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局命名空间中,会导致很多冲突,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或者名字污染,namespace关键字的出现就是解决这种问题。而C语言中没有。

8、输入与输出

cout代表c++的输出流。

cin代表c++的输入流。

它们都是在头文件“iostream”中定义。

“cout”必须与”<<”一起使用,“<<”起到插入的作用。

在一条语句中可以多次使用“<<”输出多个数据。

派生类的构造函数的执行顺序是:

1、初始化基类,就是调用基类的构造函数。如果基类也是一个派生类,就会先初始化它的基类,以此类推,最先初始化的是最上层的基类

2、基类初始化完成后,就开始执行派生类的初始化了,也就是circle(x){}后面的{}(你的派生类的构造函数体没有执行任何东西)

另外,你也可以这样。在派生类的构造函数中显示调用基类的构造函数。

incircle(double x = 0)

{

clrcle::clrcle();

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12156423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存